اگر تابهحال برنامهای را در یک سیستم ویندوز دانلود یا اجرا کردهاید، بهاحتمالزیاد با یک فایل PE مواجه شدهاید؛ اما فایل PE دقیقاً چیست و چگونه کار میکند؟ در این مقاله، ساختار فایلهای PE، اجزای آنها و نحوه اجرای آنها در سیستمهای ویندوز را بررسی میکنیم. در پایان، حتی افراد تازهوارد به دنیای برنامهنویسی و سیستمعاملها، درک کاملی از فایلهای PE و نحوه عملکرد آنها خواهند داشت.
فایل PE چیست؟
فرمت فایل PE (Portable Executable) فرمت فایلی است که برای برنامههای اجرایی، DLL (کتابخانههای پیوند پویا) و انواع دیگر فایلهای باینری در سیستمعاملهای ویندوز استفاده میشود. با ویندوز NT معرفی شد و از آن زمان به فرمت استاندارد برای فایلهای اجرایی در پلتفرمهای ویندوز تبدیلشده است.
فایلهای PE حاوی کد ماشین، دادهها و ابردادههایی هستند که نحوه بارگذاری یک برنامه در حافظه، اجرا و تعامل با سیستمعامل و سایر اجزای نرمافزار را تعریف میکنند.
ساختار یک فایل PE
یک فایل PE از چندین جزء کلیدی تشکیلشده است که هرکدام نقش خاص خود را در تعریف رفتار و ویژگیهای برنامه اجرایی دارند. بیایید ساختار یک فایل PE را بشکنیم:
سربرگ (DOS Header)DOS: سربرگ DOS یک جزء قدیمی است که حاوی اطلاعاتی است که توسط سیستمعامل MS-DOS استفاده میشود. اگرچه برای سیستمهای ویندوز مدرن ضروری نیست، اما شامل فیلدهایی مانند عدد جادویی (MZ) و افست هدر PE است.
سربرگ (PE Header)PE: هدر PE که بهعنوان COFF (فرمت فایل شیء مشترک) نیز شناخته میشود، سرآیند اصلی فایل PE است. این شامل متادیتا و ساختارهایی است که چیدمان و ویژگیهای فایل اجرایی را تعریف میکند. فیلدهای کلیدی شامل شماره جادویی (PE\0\0)، نوع معماری، تعداد بخشها و آدرس نقطه ورودی است.
سربرگ اختیاری (Optional Header): هدر اختیاری اطلاعات بیشتری در مورد فایل اجرایی و ویژگیهای آن ارائه میدهد. این شامل فیلدهایی مانند آدرس پایه تصویر، اندازه بخش کد و داده، نقطه ورودی RVA (آدرس مجازی نسبی) و نوع زیرسیستم (بهعنوانمثال، رابط کاربری گرافیکی، کنسول) است.
بخشها (Sections): بخشها تقسیمبندیهای منطقی در فایل PE هستند که حاوی کد، دادهها و منابع قابلاجرا هستند. بخشهای متداول عبارتاند از .text (کد)، .data (دادههای اولیه)، rsrc. (منابع) و .idata (نمادهای واردشده). هر بخش ویژگیهای خاص خود را دارد، مانند اندازه مجازی، اندازه خام، آدرس مجازی و ویژگیها (بهعنوانمثال، قابلاجرا، خواندن، قابلنوشتن).
جدول واردات (Import Table): جدول واردات حاوی اطلاعاتی در مورد توابع و کتابخانههای خارجی است که فایل اجرایی به آنها بستگی دارد. این شامل ارجاع به توابع واردشده، همراه با نام DLL های مرتبط (کتابخانههای پیوند پویا) و آدرسهای تابع است.
جدول صادرات (Export Table): جدول صادرات حاوی اطلاعاتی در مورد توابع و نمادهای صادرشده توسط فایل اجرایی است. این شامل نام و آدرس توابع صادرشده، همراه با سایر ابر دادهها مانند شمارههای ترتیبی و اطلاعات ارسال است.
جدول منابع (Resource Table): جدول منابع، منابع جاسازیشده مانند آیکونها، رشتهها و اطلاعات نسخه را ذخیره میکند. منابع بهصورت سلسله مراتبی سازماندهی میشوند و توسط برنامهها میتوان بهصورت برنامهنویسی به آنها دسترسی داشت.
جدول جابجایی (Relocation Table): جدول جابجایی حاوی اطلاعاتی در مورد جابجاییهای پایه است که باید زمانی که فایل اجرایی در یک آدرس پایه متفاوت از پایگاه تصویر ترجیحی خود در حافظه بارگذاری میشود، انجام شود. جابجاییها تضمین میکنند که کد و ارجاعات داده برای منعکسکننده طرحبندی حافظه جدید تنظیم میشوند.
اجرای یک فایل PE
اجرای یک فایل PE در یک سیستم ویندوز شامل چندین مرحله است، ازجمله بارگذاری فایل در حافظه، انجام پیوند پویا و مقداردهی اولیه محیط اجرای برنامه. در اینجا یک نمای کلی از روند است:
بارگذاری (Loading): لودر ویندوز فایل PE را از روی دیسک میخواند و آن را در حافظه نگاشت میکند. هدر PE، هدر اختیاری و سرفصل بخش را برای تعیین طرح و ویژگیهای فایل اجرایی تجزیه میکند.
پیوند پویا (Dynamic Linking): اگر فایل PE به کتابخانههای خارجی (DLL) وابسته باشد، لودر ویندوز با مکانیابی DLLهای مورد نیاز، بارگیری آنها در حافظه و حل آدرسهای تابع، مراجع واردات را حل میکند. این فرآیند بهعنوان پیوند پویا شناخته میشود و تضمین میکند که فایل اجرایی به توابع و نمادهای خارجی لازم دسترسی دارد.
مقداردهی اولیه (Initialization): هنگامیکه تمام وابستگیها برطرف شد، لودر ویندوز محیط اجرای برنامه را مقداردهی اولیه میکند. پشته را تنظیم میکند، متغیرهای سراسری را مقداردهی اولیه میکند و برنامه را برای اجرا آماده میکند.
اجرا (Execution): درنهایت، لودر ویندوز کنترل را به نقطه ورودی برنامه اجرایی، معمولاً تابع اصلی برای فایلهای اجرایی یا یک روال اولیه سازی برای DLL ها، منتقل میکند. برنامه اجرا را آغاز میکند و سیستمعامل تعامل خود را با منابع سیستم و سایر فرآیندها مدیریت میکند.
نتیجهگیری
درنتیجه، فایلهای PE فرمت استاندارد فایل اجرایی هستند که در سیستمعاملهای ویندوز استفاده میشود. آنها حاوی کد ماشین، دادهها و ابردادههایی هستند که رفتار و ویژگیهای برنامههای اجرایی را تعریف میکنند. درک ساختار فایلهای PE، ازجمله سر صفحهها، بخشها، جداول واردات/صادرات و منابع، برای توسعهدهندگان، مدیران سیستم و تحلیلگران امنیتی که با سیستمهای ویندوز کار میکنند ضروری است.
با درک اصول اولیه فایلهای PE و نحوه اجرای آنها، تازهواردان به دنیای برنامهنویسی و سیستمعاملها میتوانند بینش ارزشمندی در مورد عملکرد داخلی برنامههای کاربردی ویندوز به دست آورند و درک خود را از توسعه نرمافزار بر روی پلت فرم ویندوز عمیقتر کنند.