Foundationপ্রথম নীতি থেকে
LEVEL 3 · Assembly Language

ELF

এক্সিকিউটেবল অ্যান্ড লিংকেবল ফরম্যাট

Linux-এর বাইনারি container format — object file, executable, shared library তিনটাই একই ফরম্যাট, ELF header-এর e_type ফিল্ড দিয়ে আলাদা।

also: Executable and Linkable Format

Magic bytes 7f 45 4c 46 ("\x7fELF") দিয়ে শুরু — execve() এই চার byte চেক করেই বুঝে ফাইলটা কীভাবে পড়তে হবে।

e_type — একই format, তিন ভূমিকা:

e_typeমানে
ET_REL.o — linked হয়নি
ET_EXECপুরনো-স্টাইল non-PIE executable
ET_DYNshared library অথবা PIE executable
ET_COREcrash-এর memory snapshot

Section বনাম segment — সবচেয়ে সাধারণ বিভ্রান্তি। Section (.text, .data, .bss, .symtab) সূক্ষ্ম-দানার, নাম-করা, linker/analysis টুলের জন্য (readelf -S)। Segment (program header, PT_LOAD) মোটা-দানার, নামহীন memory region, loader/kernel-এর জন্য (readelf -l) — execve() শুধু segment পড়ে, section header স্পর্শও করে না। সম্পর্কটা many-to-one: অনেক section একটা segment-এ গোষ্ঠীবদ্ধ হয়, একই page-permission-এর ভিত্তিতে।

.bss ফাইলে নেই। Type = NOBITS — uninitialized data (ডিফল্ট মান শূন্য) সংরক্ষণ করার কোনো মানে নেই, তাই ফাইলে শুধু একটা Size সংখ্যা থাকে, প্রকৃত byte না। একটা 40 MB uninitialized array ফাইলের আকারে প্রায় কিছুই যোগ করে না — একই আকারের initialized (.data) array সত্যিই 40 MB যোগ করে।

strip-করা বাইনারিতে section header সম্পূর্ণ অনুপস্থিত থাকতে পারে, তবু নিখুঁতভাবে চলে — কারণ runtime শুধু program header-এর উপর নির্ভর করে।