ساختار فایلهای اجراییPE در ویندوز (Portable Executable File Format) – قسمت اول

شرکت مایکروسافت در زمان عرضه ویندوزNT، فرمت جدیدی را برای فایلهای اجرایی ویندوز با نام PE یا (Portable Executable) معرفی نمود. کلمه PE به معنی اجرایی قابل حمل می‌باشد که دلیل آن این است که این فرمت فایل، در میان تمام سیستم عاملهای 32 بیتی مایکروسافت قابل استفاده بوده و توسط آنها پشتیبانی می‌شود. این فرمت بر اساس COFF (Common Object File Format) که فرمت فایل رایج و مورد استفاده در سیستم عاملهای اولیه یونیکس است طراحی شده بود.

فرمت PE در سال 1993 توسط کمیته‌ای به نام TIS (Tool Interface Standard) متشکل از شرکتهای اینتل، مایکروسافت، بورلند و آی‌بی‌ام به استانداردی همگانی تبدیل شد.

فایل PE به بلاکهایی به نام سکشن تقسیم شده که حاوی داده‌هایی با خصلتهای مختلف مثل داده/کد اجرایی/خواندنی/نوشتنی هستند. مثلاً سکشن .text حاوی کد اجرایی کامپایل شده برنامه بوده و یا سکشن .rsrc حاوی ریسورسهای مورد استفاده برنامه مثل تصاویر، اصوات یا فرمها است.

در میان تمام این سکشنها، بخش .idata حاوی جدول آدرسهای وارد شده (IAT) یا به قولی جدول تمامی ارجاعات برنامه در فراخوانی توابع و روتینهای کتابخانه‌ای پویا می‌باشد. این جدول حاوی آدرس نسبی تمام توابعImport شده به فایل اجرایی است. پس از اجرای یک فایل PE، سیستم عامل آن را درون حافظه بارگذاری کرده و این آدرسها را به آدرس صحیح توابع مذکور در حافظه تغییر می‌دهد. دلیل وجود این جدول این است که فایلهای اجرایی همیشه در مکان ثابتی از حافظه بارگذاری نمی‌شوند.

در نتیجه پس از هر بار اجرای برنامه، می‌بایست در تمام فراخوانیهای موجود، آدرس نسبی تصحیح گشته که این عمل بسیار مشکل است. این مشکل با مجتمع کردن تمام آدرسهای وارد شده در مکان IAT حل می‌شود. بدین منظور کافی است که هر یک از فراخوانیها را به طور نسبی (محلی) نسبت به IAT آدرس‌دهی کنیم و آدرسهای اصلی را در خود IAT نگهداریم. بدین شکل سیستم عامل به سادگی می‌تواند یک بار آدرس مربوطه را درIAT تغییر دهد که به ازای آن تمام فراخوانیها از طریق همین آدرس تصحیح شده انجام خواهند شد.

About محمد شمس

برنامه‌نویس، طراح انیمیشن و علاقمند به هوش مصنوعی

4 Comments

  1. خیلی خوبه. لطفا ادامه بدید.

  2. بسیار عالی اگه امکانش هست قسمت های مختلف یک فایل اجرایی اینکه از چه بخش هایی تشکیل شده رو هم بگید با تشکر فراوان

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


9 × 8 =