برنامه نویس پایتون و دوستدار سیستم های توزیع شده، دانش داده ها و زبان عبری http://learnhebrew.ir
فرمت های فایل های دودویی اجرا شدنی
پس از نوشتن یک برنامه به هر زبانی مانند سی، سی پلاس پلاس، جاوا یا سی شارپ و دیگر زبان ها، کامپایلر می بایست که یک فایل دودویی از روی کد بسازد. این که این فرایند چگونه است، بحثی جدا را می خواهد ولی به هر رو، برآیند کامپایل یک فایل دودویی اجرا شدنی (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 این کتابخانه های اشتراکی را نشان می دهد.
برای فراگیری بیشتر می توانید به سایت زیر نگاهی بیاندازید
و یا می توانید در کانال تلگرام عضو شوید.
مطلبی دیگر از این انتشارات
آشنایی با سوکت های شبکه در سی و لینوکس - بخش ششم
مطلبی دیگر از این انتشارات
کتابخانه های ایستا و پویا و شیوه های Linker در برنامه نویسی
مطلبی دیگر از این انتشارات
آشنایی با سوکت های شبکه در سی و لینوکس - بخش هفتم