Sajjad
Sajjad
خواندن ۲ دقیقه·۵ سال پیش

ELF چیست؟



قالب ELF چیست؟

وقتی یه کدی رو به طور مثال با C مینویسیم، کامپایلر اول کدهامونو به Object file تبدیل میکنه و بعد Linker از اون ها یه فایل قابل اجرا میسازه.

فرمت ELF، مخفف Executable and linking format قالبیه برای همین فایل های باینری قابل اجرا، حالا ممکنه این فایل قابل اجرا یه فایل executable باشه یا یه لایبرری.

این فرمت در سیستم های Unixی و شبه Unixی به عنوان استاندارد فایل های باینری انتخاب شده؛ حالا بسته به هر سیستم عاملی که توش قراره یه فایل با فرمت elf ساخته شه و بسته به این که اون فایل لایبرریه یا چیز دیگه، ممکنه پسوند فایل bin یا so یا o یا elf باشه.

حالا خود این قالب چه جور ساختاریه؟

فایل های ELFی به طور کلی از دو بخش (سرتیتر)Header و (محتوای فایل)File data تشکیل میشه

سرتیتر یا Header

این بخش یه long سی و دو بایتیه که اولش برای مشخص کردن فرمت فایله که با چهار تا Byteی که این زیر می‌بینید شروع میشه، ابتدا 7f به معنای .، سپس 45 به معنای E، سپس 4c به معنای L و 46 به معنای F

$ hd /usr/bin/touch | head -5 00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|

و ما بقیش هم اطلاعاتی از قبیل این که آیا برای فرمت ۶۴ بیته یا ۳۲ بیت و یا این که برا چه سیستم عاملی کامپایل شده.

تو توزیع Debian GNU/Linux یه دستور readelf -h هست که میتونید باهاش هدر فایل ELFی رو به طور Human friendly ببینید

محتوای فایل یا File data

Program header or Segments:

محتوای فایل در ابتدا از یه Program Header یا به عبارتی Segments تشکیل میشه که حاوی اطلاعاتیه برای Runtime؛ این بخش برای این که linker اجازه ی اجرا شدن رو بده استفاده میشه.

همچنین Kernel از این اطلاعات به همراه ساختار اطلاعاتی زیربنایی که تو فایل وجود داره، برای تشکیل یک پردازش استفاده میکننه

Section header or Sections:

سپس محتوای فایل از یک بخش به نام Section Header یا Sections تشکیل میشه که برای linking و relocating استفاده میشه

تک تک بخش های فایل باینری توش لیست شده و بیانگر اینه که این بخش ها سایزشون چقدره، نوعشون چیه، آدرسشون کجاست و memory offsetشون چقدره



بیشتر بخوانید:

https://linux-audit.com/elf-binaries-on-linux-understanding-and-analysis/

https://linuxhint.com/understanding_elf_file_format/

Executable and Linkable Formatelfساختار فایل های قابل اجراbinary filelinux
Programmer
شاید از این پست‌ها خوشتان بیاید