# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مهندسی مجدد و معکوس >  تبدیل فایل EXE به DLL

## CYCLOPS

سلام خدمت دوستان عزیز
سوالم اینه که چطور میشه یه فایل EXE رو به فایل DLL تبدیل کرد ؟؟

بذارید با یه مثال ساده بحث رو شروع کنیم :
فرض کنید یه برنامه خیلی ساده داریم (PE) که شامل یک فرم ؛ دو تا تکست باکس و یک دکمه هست کل کد برنامه هم تو رویداد کلیک دکمه است و بعد از کلیک دکمه جمع دو عد ورودی تکست باکس ها نمایش داده میشه حالا میخوایم این فایل رو تبدیل کنیم به یک DLL که یک متد داره که دو تا عدد میگیره و یک عدد (جمعشون) رو بر میگردونه

در واقع :
باید چه تغییری تو ساختار یک فایل EXE ایجاد کرد که تبدیل به یک DLL بشه ؟؟
تغییر در هدر فایل برای تبدیلش کافیه یا نه ؟؟ (اگه آره کجا و چه تغییری ؟؟)

پیشاپیش ممنون  :تشویق:

----------


## BackTrace

سلام، خسته نباشین.
با این مثالی که زدین من یاد ActiveXهای VB افتادم. که داستانشون با DLL کمی فرق میکنه. :متفکر: 
ما با DLLها با Call و Return ارتباط برقرار میکنیم. فکر نکنم فایل DLL به صورت ویژوال وجود داشته باشه. اما ...
Entry Point فایل های DLL تابع DllMain و برای فایل های EXE تابع WinMain هستش درضمن Messageهای هرکدوم هم با دیگری دربیشتر جاها متفاوت هست. DLLها دارای Export Table هستن درحالیکه فایل های EXE دارای این قسمت نیستن. علاوه بر اینها درموارد دیگه ای هم تفاوت وجود داره. :خیلی عصبانی: 
پس شما باید حداقل تغییرات بالا رو انجام بدین که فکر کنم از اول نوشتن یک DLL خیلی بهتر باشه.

پیروز باشید./

----------


## CYCLOPS

ممنون دوست عزیز
صحبت هات همه درسته ولی خوب یه زمانی هست که ما یه فایل EXE داریم و به سورسش دسترسی نداریم و میخوایم یه سری پارامتر رو به فایل بفرستیم تا کاری رو انجام بده و خروجی رو برگردونه در واقع میخوایم یه جورایی فایل EXE رو Automate کنیم .


خوب حالا برای اضافه کردن یه Export Table به یه فایل EXE باید چیکار کرد ؟؟
تو هدر فایل های PE یه فلگ با عنوان Is Dll Library یا همچین چیزی هست آیا با تغییر اون فلگ از 0 به 1 برای فایل EXE ما Export Table ساخته میشه؟؟
برای تغییر Entry Point یه فایلEXE باید چیکار کرد ؟؟

ممنون از توجهتون  :چشمک:

----------


## BackTrace

خواهش میکنم.
اضافه کردن یه Export Table کار دشوار و شاید غیرممکنه چون احتمالا به بازنویسی کامل کد نیاز داره. (من اطلاعات موثق بیشتری نداشتم که ارائه کنم. :افسرده: )
گزینه "Is Dll Library" برای DLLها ضروری هست اما کافی نیست. :چشمک: 
Entry Point در واقع یک تابع هست که باید برای پیفام هایی که به Dll میرسه از خودش واکنش نشون بده. تغییر Entry Point یک EXE سخته چون باید توابع رو کامل و در سطح اسمبلی بشناسین و با یک اشتباه ساده، Exception تولید میشه.
در کل اگه مهمه پیشنهاد میکنم وقتتون رو برای Reverse کردنش بذارین.

پیروز باشید./

----------


## CYCLOPS

به نظر بقیه دوستان هم اینکار سخته ؟؟

ابزاری چیزی نیست که این سختی ها رو متحمل بشه و تبدیل EXE به DLL رو خودش انجام بده ؟؟  :ناراحت:

----------


## BackTrace

یه مقاله خوب پیدا کردم:
http://keeper.lubie.org/other_docs/c...exe_to_dll.htm
نوشته Tomasz Lis


پیروز باشید./

----------

