دی کامپایلر ( به انگلیسی: Decompiler ) ها برنامه هایی هستند که کدهای اجرایی ( فایل با پسوند هایی مانند exe ) را به عنوان ورودی دریافت می کنند و آن را به سورس کد برنامه تبدیل می کنند، به طوری که این کد قابلیت کامپایل شدن را داشته باشد. عملکرد دیکامپایلرها دقیقاً برعکس کامپایلرها می باشد. کامپالرها سورس کد را به فایل اجرایی تبدیل می کنند ولی دیکامپایلرها برعکس.
به طور کلی کامپایلرها قادر به بازگرداندن یک فایل اجرایی به سورس کد آن به شکل دقیق و بی نقص نیستند و در اکثر مواقع کدهایی مبهم ( obfuscated code ) می سازند. با این حال دیکامپایلرها هنوز ابزاری بسیار مهم در مهندسی معکوس به شمار می روند.
دیکامپایلر ( مترجم وارون ) معمولاً کد اجرایی را به کد منبع در زبان برنامه نویسی سطح بالا ترجمه می کند به طوری که اگر کد جدید دوباره ترجمه گشت در اجرا مانند کد اجرایی اصلی عمل کند.
از دیکامپایلر برای مباحث امنیت کامپیوتر ، تصحیح خطاها و. . . استفاده می شود. زبان های کامپایلری مفسری که از کد میانی و ماشین مجازی استفاده می کنند معمولاً به صورت کامل قابل برگشت هستند ، یعنی حتی شماره ی خطوط و نام متغییرهای کد اصلی هم قابل برگشت است. از این دست زبان ها می توان به جاوا و . net اشاره کرد. به عنوان مثال دیکامپایلر jd - gui برای جاوا وجود دارد که کد را به صورت کامل برمی گرداند. برای جلوگیری از دیکامپایل برنامه ها ابزاری با عنوان مبهم کننده ی کد ( obfuscated code ) وجود دارد که عملیات مهندسی معکوس را مشکل تر می کند.
دیکامپایلرها در پروسه تبدیل یک فایل اجرایی به سورس کد فاز های مختلفی را طی میکنند که در ادامه فازهای مختلف آن را بررسی میکنیم.
اولین فاز در دیکامپایل عمل بارگزاری و تجزیه کد ورودی که به زبان ماشین است را انجام میدهد. این مرحله باید قسمت های مختلفی را مشخص کند. از جمله معماری و همچنین کد معادل تابع main در زبان c که در واقع شروع کدیست که توسط برنامه نویس ها نوشته شده است.
فاز منطقی بعدی در عملیات دیکامپایل کردن عبارت است از جداسازی قطعات ( disassembling ) کد ماشین و تبدیل آن به یک کد machine independent intermediate representation ( IR ) به طور مثال دستورالعمل ماشین پنتیوم را در قسمت زیر مشاهده میکنید.
mov eax, به کد زیر ترجمه خواهد شد.
eax := m; بعد از این مراحل به ترتیب idioms, program analyses, dataflow analyses, type analyses, structuring و در نهایت code generation انجام میشود که توضیحات کامل تر آن ها را به همراه مثال میتوانید در لینک مربوط به مقاله اصلی مشاهده نمایید.
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفبه طور کلی کامپایلرها قادر به بازگرداندن یک فایل اجرایی به سورس کد آن به شکل دقیق و بی نقص نیستند و در اکثر مواقع کدهایی مبهم ( obfuscated code ) می سازند. با این حال دیکامپایلرها هنوز ابزاری بسیار مهم در مهندسی معکوس به شمار می روند.
دیکامپایلر ( مترجم وارون ) معمولاً کد اجرایی را به کد منبع در زبان برنامه نویسی سطح بالا ترجمه می کند به طوری که اگر کد جدید دوباره ترجمه گشت در اجرا مانند کد اجرایی اصلی عمل کند.
از دیکامپایلر برای مباحث امنیت کامپیوتر ، تصحیح خطاها و. . . استفاده می شود. زبان های کامپایلری مفسری که از کد میانی و ماشین مجازی استفاده می کنند معمولاً به صورت کامل قابل برگشت هستند ، یعنی حتی شماره ی خطوط و نام متغییرهای کد اصلی هم قابل برگشت است. از این دست زبان ها می توان به جاوا و . net اشاره کرد. به عنوان مثال دیکامپایلر jd - gui برای جاوا وجود دارد که کد را به صورت کامل برمی گرداند. برای جلوگیری از دیکامپایل برنامه ها ابزاری با عنوان مبهم کننده ی کد ( obfuscated code ) وجود دارد که عملیات مهندسی معکوس را مشکل تر می کند.
دیکامپایلرها در پروسه تبدیل یک فایل اجرایی به سورس کد فاز های مختلفی را طی میکنند که در ادامه فازهای مختلف آن را بررسی میکنیم.
اولین فاز در دیکامپایل عمل بارگزاری و تجزیه کد ورودی که به زبان ماشین است را انجام میدهد. این مرحله باید قسمت های مختلفی را مشخص کند. از جمله معماری و همچنین کد معادل تابع main در زبان c که در واقع شروع کدیست که توسط برنامه نویس ها نوشته شده است.
فاز منطقی بعدی در عملیات دیکامپایل کردن عبارت است از جداسازی قطعات ( disassembling ) کد ماشین و تبدیل آن به یک کد machine independent intermediate representation ( IR ) به طور مثال دستورالعمل ماشین پنتیوم را در قسمت زیر مشاهده میکنید.
mov eax, به کد زیر ترجمه خواهد شد.
eax := m; بعد از این مراحل به ترتیب idioms, program analyses, dataflow analyses, type analyses, structuring و در نهایت code generation انجام میشود که توضیحات کامل تر آن ها را به همراه مثال میتوانید در لینک مربوط به مقاله اصلی مشاهده نمایید.
wiki: دی کامپایلر