فرمت های فایل های دودویی اجرا شدنی

پس از نوشتن یک برنامه به هر زبانی مانند سی، سی پلاس پلاس، جاوا یا سی شارپ و دیگر زبان ها، کامپایلر می بایست که یک فایل دودویی از روی کد بسازد. این که این فرایند چگونه است، بحثی جدا را می خواهد ولی به هر رو، برآیند کامپایل یک فایل دودویی اجرا شدنی (Executable Binary File) است.

Flat Binary Executable

یک فایل Flat Binary Executable (یا FBE) یکی از فایل های دودویی اجرا شدنی است که تنها در برگیرنده کد اجرا شدنی (Executable Code) و داده های آغازین (Initialization Data) است. این گونه فایل دودویی اجرایی، برای اجرا شدن به به طور کامل درون حافظه بارگذاری شود. یک نمونه بارز از فایل دودویی اجرای FBE، فایل بوت سیستم عامل است که برای اجرا شدن، باید تماما در حافظه بارگذاری شود. در واقع FBE یک تک قطعه از کدهایی دودویی اجرا شدنی است که برای اجرا شدن به طور کامل درون حافظه بارگذاری می شوند.

a.out Executable File

یک فایل با پسوند out مانند a.out در آغاز دارای یک سرآیند (Header) است و سپس به دنبال آن بخش کد، سپس بخش داده ها و در پایان بخش BSS () است.

ELF Executable File

سرآغاز این فایل یک سرآیند به نام elf-header است که به دنبال یک یا چندین بخش برنامه (Program Section) می آید. در سیستم عامل لینوکس دستوری به نام readelf است که برای نمایش اطلاعاتی درباره یک فایل ELF به کار می رود.

گمان کنید که یک فایل دودویی به نام GtkApp1 داریم و می خواهیم درون مایه آن را درباره فرمت ELF بدانیم. برای این کار می توانید دستور زیر را اجرا کنید که همه اطلاعات ELF را نشان می دهد. در شکل زیر می بینید که سرآغاز فایل سرآیند elf-header است.

readelf -a GtkApp1

فرمت ELF می تواند تا چندین بخش سرآیند برنامه (Program Header) داشته باشد که این امکان پذیر است که هر یک از این بخش ها درون یک فضای آدرس حافظه اصلی بارگذاری شوند. این فرمت فایل دودویی اجرای پیش فرض در سیستم عامل لینوکس است که برای پیوند پویا (Dynamic Linking) کارآتر و پسندیده تر است.

در دومین شکل از بالا می توانید بخش سرآیندهای برنامه را ببینید. همچنین این فایل دودویی اجرایی بر پایه Dynamic Linking است که از این رو کتابخانه های اشتراکی یا در لینوکس Shared Object (فایل های با پسوند so) به کار گرفته می شوند که شکل زیر برای نمونه برنامه GtkApp1 این کتابخانه های اشتراکی را نشان می دهد.

https://virgool.io/linux-internals/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D9%87%D8%A7%DB%8C-%D8%A7%DB%8C%D8%B3%D8%AA%D8%A7-%D9%88-%D9%BE%D9%88%DB%8C%D8%A7-%D9%88-%D8%B4%DB%8C%D9%88%D9%87-%D9%87%D8%A7%DB%8C-linker-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-voruq0q7uju1

منبع

برای فراگیری بیشتر می توانید به سایت زیر نگاهی بیاندازید

http://sysadmingeeks.ir

https://dataset-academy.com

و یا می توانید در کانال تلگرام عضو شوید.

https://t.me/datasetacademydotcom