فرمت اجرایی و مرتبط

بندانگشتی| یک فایل ELF دارای دو نمایش است: سربرگ برنامه که ''بخش های'' مورد استفاده در زمان اجرا را نشان می‌دهد(segments)، در حالی که سربرگ بخش‌ها مجموعه ای از ''بخش''‌های باینری را لیست می‌کند. (section)
در رایانش، **فرمت اجرایی و مرتبط** (**ELF**، که قبلاً به نام **Extensible Linking Format** نامیده می‌شد) یک استاندارد فرمت فایل برای فایل‌های اجرایی، کد هدف (object code)، کتابخانه‌های اشتراکی و تخلیهٔ هسته (core dump) است. اولین بار با ویژگی‌هایی برای رابط دودویی نرم‌افزار (ABI) سیستم عامل یونیکس نسخه یSystem V Release 4 (SVR4) منتشر شد، و بعد تر در استاندارد رابط ابزار که به سرعت مورد قبول فروشندگان مختلف سیستم های یونیکس قرار گرفت. در سال ۱۹۹۹، به عنوان فرمت استاندارد فایل باینری برای سیستم‌های یونیکس و شبه یونیکس بر روی پردازنده‌های x86 توسط پروژه 86open انتخاب شد.

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

## طرح فایل
هر فایل ELF از یک سرصفحه ELF (هدر ELF) ساخته شده‌است و به دنبال آن داده‌های فایل آمده‌است. داده‌ها می‌توانند شامل موارد زیر باشند:
* جدول هدر برنامه، که صفر یا چند بخش حافظه (memory segments) را توصیف می‌کند.
* جدول هدر بخش، که صفر یا چند بخش (section) را توصیف می‌کند.
* داده‌هایی که توسط محتویات جدول هدر برنامه یا جدول هدر بخش به آن‌ها اشاره شده‌است.

بخش‌ها (segments)حاوی اطلاعاتی هستند که برای زمان اجرای فایل مورد نیاز است، در حالی که بخش‌ها (sections) حاوی اطلاعات مهم برای اتصال(linking) و جابجایی هستند. هر بایت در کل فایل می‌تواند حداکثر متعلق به یک قسمت (section) باشد و اصطلاحاً بایت‌های یتیم زمانی به وجود می‌آیند که بایتی متعلق به هیچ بخش نباشد. 

### هدر فایل
هدر ELF تعریف می‌کند که از آدرس‌های ۳۲ بیتی استفاده شده‌است یا ۶۴ بیتی. هدر حاوی سه فیلد است که از ۳۲ بیتی یا ۶۴ بیتی بودن تأثیر می‌پذیرند و شروع فیلدهای دیگری را که آنها را دنبال می‌کنند، تعیین می‌کنند. هدر ELF به ترتیب برای ۳۲ بیت و ۶۴ بیت، ۵۲ یا ۶۴ بایت طول دارد.

### هدر برنامه
جدول هدر برنامه به سیستم می‌گوید چگونه یک تصویر پردازش ایجاد کند.

هدر برنامه در محل نشانگر فایل e_phoff یافت می‌شود و شامل ورودی‌های e_phnum است که هر کدام با اندازه e_phentsize هستند. طرح بندی در ELF ۳۲ بیتی نسبت به ELF 64 بیتی کمی متفاوت است، زیرا p_flags به دلیل ایجاد هماهنگی در مکان ساختاری متفاوت قرار دارند. هر ورودی به صورت زیر تشکیل شده‌است:

### سربرگ بخش

## ابزارها
* `[[ریدالف|readelf]]` یک ابزار باینری یونیکس است که اطلاعات مربوط به یک یا چند فایل ELF را نمایش می‌دهد. پیاده‌سازی نرم‌افزار رایگان توسط GNU Binutils ارائه شده‌است.
* `elfutils` ابزارهای جایگزین را برای GNU Binutils صرفاً برای لینوکس فراهم می‌کند.
* `elfdump` یک فرمان برای مشاهده اطلاعات ELF در یک فایل ELF است که تحت Solaris و FreeBSD موجود است.
* `[[ابج دامپ|objdump]]` طیف گسترده‌ای از اطلاعات مربوط به فایل‌های ELF و سایر فرمت‌های شی را فراهم می‌کند. `objdump` از کتابخانه توصیفگر فایل باینری به عنوان پایه برای ساخت داده‌های ELF استفاده می‌کند.
* ابزار `[[File (یونیکس)|file]]` یونیکس می‌تواند برخی از اطلاعات مربوط به فایل‌های ELF را نمایش دهد، از جمله معماری تنظیم دستورالعمل که کد آن در یک فایل قابل جابجایی، اجرایی یا شی مشترک، مورد نظر قرار می‌گیرد یا در آن یک تخلیه هسته ای ال اف (ELF core dump) تولید شده‌است.

## برنامه‌های کاربردی
### سیستم‌های شبه یونیکس
فرمت ELF جایگزین فرمت‌های اجرایی قدیمی در محیط‌های مختلف شده‌است. این فرمت، فرمت‌های a.out و COFF را در سیستم عامل‌های شبه یونیکس جایگزین کرده‌است:
* لینوکس
* solaris/ Illumos
* IRIX
* FreeBSD
* NetBSD
* OpenBSD
* Redox
* DragonFly BSD
* Syllable
* HP-UX (به جز برنامه‌های ۳۲ بیتی PA-RISC که همچنان از SOM استفاده می‌کنند)
* QNX Neutrino
* MINIX

### تصویب غیریونیکس
ELF همچنین مورد تصویب برخی از سیستم‌های عامل غیر یونیکس بوده‌است، مانند:
* OpenVMS, در ورژن‌های Itanium و x86-64
* BeOS Revision 4 وبعدتر برای کامپیوترهایی که پایهٔ آن‌ها x86 است. (که فرمت Portable Executable را جایگزین کرد؛ ورژن PowerPC همچنان با فرمت Preferred Executable Format باقی ماند)
* Haiku, یک پیاده‌سازی مجدد متن باز برای BeOS
* RISC OS
* Stratus VOS, در ورژن‌های PA-RISC و x86
* Windows 10 Anniversary Update با استفاده از Windows Subsystem for Linux.
* SkyOS
* Fuchsia OS
* Z/TPF
* HPE NonStop OS

### کنسول‌های بازی
همچنین برخی از کنسول‌های بازی از ELF استفاده می‌کنند:
* PlayStation Portable , PlayStation Vita، PlayStation 2، PlayStation 3، PlayStation 4
* GP2X
* رویای
* Wii

### PowerPC
سایر سیستم عامل‌های فعال در PowerPC که از ELF استفاده می‌کنند:
* AmigaOS 4، ای ال اف اجرایی (ELF executableج ایگزین Format Extended Hunk Format (EHF) شده‌است که در Amigas که مجهز به کارتهای توسعه PPC است، استفاده شده‌است.
* MorphOS
* AROS

### تلفن‌های همراه
برخی از سیستم عامل‌های تلفن همراه و دستگاه‌های تلفن همراه از ELF استفاده می‌کنند:
* Symbian OS v9 از فرمت E32Image کند که بر اساس فرمت فایل ELF است؛
* برای مثال سونی اریکسون، W800i، W610، W300 و غیره
* سیستم‌های زیمنس، سکوهای SGOLD و SGOLD2: از زیمنس C65 تا S75 و BenQ-Siemens E71 / EL71؛
* موتورولا، به عنوان مثال، E398، SLVR L7، v360، v3i (و تمام گوشی LTE2 که دارای پچ است).
* برای مثال بادا، سامسونگ Wave S8500
* تلفن‌های نوکیا یا تبلت‌های نوکیا که Maemo یا Meego OS را اجرا می‌کنند، به عنوان مثال Nokia N900.
* اندروید از کتابخانه‌های (ELF .so (shared object برای رابط بومی جاوا استفاده می‌کند. با استفاده از Android Runtime (ART)، به‌طور پیش فرض از Android 5.0 "Lollipop"، تمام برنامه‌های کاربردی در هنگام نصب به صورت ELFهای بومی باینری کامپایل می‌شوند.

برخی از تلفن‌ها می‌توانند فایل‌های ELF را از طریق استفاده از یک پچ که کد مونتاژ را به سیستم عامل اصلی اضافه می‌کند، اجرا کنند که این ویژگی با عنوان *ELFPack* در فرهنگ مودینگ زیرزمینی، شناخته شده‌است. فرمت فایل ELF همچنین با Atmel AVR (8 بیتی)، AVR32 و با معماری میکروکنترلر Texas Instruments MSP430 مورد استفاده قرار می‌گیرد. برخی از پیاده‌سازی‌های Firmware Open همچنین می‌توانند فایل‌های ELF را بارگذاری کنند، به ویژه پیاده‌سازی‌های اپل که در تقریباً تمامی دستگاه‌های PowerPC که توسط خود شرکت تولید شده‌اند، مورد استفاده قرار می‌گیرند.

## مشخصات فنی

* Generic:
** *[http://www.sco.com/developers/devspecs/gabi41.pdf System V Application Binary Interface]* Edition 4.1 (1997-03-18)
** *[http://www.sco.com/developers/gabi/latest/contents.html System V ABI Update]* (اکتبر ۲۰۰۹)
* AMD64:
** *[http://refspecs.linuxbase.org/elf/x86_64-abi-0.99.pdf System V ABI, AMD64 Supplement]*
* ARM:
** *[http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044b/IHI0044B_aaelf.pdf ELF for the ARM Architecture]*
* IA-32:
** *[http://www.sco.com/developers/devspecs/abi386-4.pdf System V ABI, Intel386 Architecture Processor Supplement]*
* IA-64:
** *[http://refspecs.linux-foundation.org/IA64conventions.pdf Itanium Software Conventions and Runtime Guide]* (سپتامبر ۲۰۰۰)
* M32R:
** *[http://www.linux-m32r.org/cmn/m32r/M32R-elf-abi.pdf M32R ELF ABI Supplement]* Version 1.2 (2004-08-26)
* MIPS:
** *[http://www.sco.com/developers/devspecs/mipsabi.pdf System V ABI, MIPS RISC Processor Supplement]*
** *[http://sources.redhat.com/ml/binutils/2003-06/msg00436.html MIPS EABI documentation]* (2003-06-11)
* Motorola 6800:
** *[http://uclibc.org/docs/psABI-m8-16.pdf Motorola 8- and 16- bit Embedded ABI]*
* PA-RISC:
** *[https://web.archive.org/web/20110317045038/http://refspecs.freestandards.org/elf/elf-pa.pdf ELF Supplement for PA-RISC]* Version 1.43 (۶ اکتبر ۱۹۹۷)
* PowerPC:
** *[https://web.archive.org/web/20070630123210/http://refspecs.freestandards.org/elf/elfspec_ppc.pdf System V ABI, PPC Supplement]
** *PowerPC Embedded Application Binary Interface 32-Bit Implementation* (1995-10-01)
** *64-bit PowerPC ELF Application Binary Interface Supplement* Version 1.9 (2004)
* [[SPARC]]:
** *System V ABI, SPARC Supplement*
* [[S/390]]:
** *S/390 32bit ELF ABI Supplement*
* [[zSeries]]:
** *zSeries 64bit ELF ABI Supplement*
* [[Symbian]] OS 9:
** *E32Image file format on Symbian OS 9*
 پایگاه استاندارد لینوکس (LSB) بعضی از ویژگی‌های فوق را برای معماری‌هایی که مشخص شده‌اند، می‌افزاید. به عنوان مثال، برای System V ABI، مکمل AMD64 وجود دارد.

== 86open ==
*'86open*' یک پروژه برای شکل‌گیری توافق عمومی بر روی یک فرمت [[پرونده دودویی|فایل باینری]] رایج برای سیستم عامل‌های [[یونیکس]] و [[شبه‌یونیکس|شبه یونیکس]] روی کامپیوترهای رایج سازگار با [[اکس۸۶|معماری x86]] بود تا توسعه دهندگان نرم‌افزار تشویق شوند که به این معماری روی بیاورند. ایده اولیه این بود که بر روی یک زیر مجموعه کوچک از Spec 1170، یک پیشین برای مشخصات یونیکس تک و کتابخانه GNU C (glibc) استانداردسازی شود تا باینری‌های غیر اصلاح شده بتوانند در سیستم عامل‌های یونیکس x86 اجرا شوند. این پروژه در ابتدا "Spec 150" نامگذاری شد.

فرمتی که در نهایت انتخاب شد، ELF بود، به ویژه ELF پیاده‌سازی شده برای لینوکس که پس از آن تبدیل شده بود به استاندارد de facto که توسط همه فروشندگان و سیستم عامل‌های مرتبط پشتیبانی می‌شد.

این گروه در سال ۱۹۹۷ بحث‌های ایمیلی را آغاز کرد و برای اولین بار در ۲۲ اوت ۱۹۹۷ با یکدیگر در دفتر [[:en:Santa_Cruz_Operation|Santa Cruz Operation]] ملاقات کرد.

کمیته فرماندهی مارک ایوینگ، دیون جانسون، ایوان لیبوویچ، [[بروس پرنز|بروس پرونس]]، اندرو روچ، برین اسپارکس و [[لینوس توروالدز]] بودند. دیگر افراد در این پروژه عبارت اند از: [[کیث باستیک|کیت بستیک]]، چاک کرانور، مایکل دیویدسون، کریس جی. دمتریو، اولریش دپپر، دون دوگگر، استیو گینزبورگ، جان دانیل هال، رون هولت، [[جردن هابارد|اردن هابارد]]، دیو جانسن، کین جانستون، اندرو جوزی، رابرت لیپ، بلا لوبکین، تیم مارسلند، گرگ پیج، رونالدو جو رکورد، تیم راکله، جوئل سیلور اشتاین، چیا پی تیین و اریک تران.

سیستم‌های عامل و شرکت‌های موجود عبارت بودند از [[بی اواس|BeOS]]، [[برکلی سافتور دیزاین|BSDI]]، [[فری‌بی‌اس‌دی|FreeBSD]]، [[اینتل]]، [[لینوکس]]، [[نت‌بی‌اس‌دی|NetBSD]] , SCO و [[سان مایکروسیستمز|SunSoft, Inc.]].

این پروژه پیشرفت کرد و در اواسط سال ۱۹۹۸، SCO شروع به توسعه lxrun کرد که یک [[لایه سازگاری]] با منبع باز بود که قادر به اجرای باینری‌های لینوکس در OpenServer , UnixWare و [[سولاریس (سیستم‌عامل)|Solaris]] بود. SCO حمایت رسمی خود را از lxrun در LinuxWorld در ماه مارس ۱۹۹۹ اعلام کرد. [[سان مایکروسیستمز|Sun Microsystems]] در اوایل سال ۱۹۹۹ به‌طور رسمی از lxrun برای سولاریس پشتیبانی کرد و بعد به پشتیبانی یکپارچه از فرمت دودویی لینوکس از طریق [[:en:Solaris_Containers_for_Linux_Applications|Solaris Containers for Linux Applications]] پرداخت.

با استفاده از BSDهایی که به مدت طولانی لینوکس را پشتیبانی می‌کنند (از طریق یک [[لایه سازگاری]]) و فروشندگان اصلی x86 Unix با پشتیبانی از فرمت اضافه شده‌است، این پروژه تصمیم گرفت که ELF لینوکس فرمت انتخاب شده توسط صنعت باشد و «اعلام کند که خودش حل شده» در ۲۵ ژوئیه ۱۹۹۹.

== FatELF: باینری‌های جهانی برای لینوکس ==
FatELF یک فرمت دودویی گسترش یافتهٔ ELF است که قابلیت‌های باینری fat را اضافه می‌کند. ّFatELF برای [[لینوکس]] و سایر [[شبه‌یونیکس|سیستم عامل‌های مشابه یونیکس]] بشمار می‌رود. علاوه بر انتزاع معماری پردازنده (ترتیب بایت، اندازهٔ word، [[مجموعه دستورالعمل|دستورالعمل]] [[واحد پردازش مرکزی|CPU]] و غیره)، در software-platform abstraction مزیت بالقوه ای وجد دارد مانند باینری‌هایی که از نسخه‌های متعددی از کرنل [[رابط دودویی نرم‌افزار|ABI]] پشتیبانی می‌کنند. تا سال ۲۰۱۴، پشتیبانی از FatELF در خط اصلی کرنل لینوکس یکپارچه نیست.

== جستارهای وابسته ==

* [[رابط دودویی نرم‌افزار|رابط باینری برنامه]]
* مقایسه فرمت‌های [[فایل اجرایی]]
* DWARF - یک فرمت برای اشکال زدایی داده‌ها
* استاندارد سازگاری باینری اینتل
* [[ساختار فایل‌های اجرایی|اجرایی قابل حمل]] - فرمت مورد استفاده توسط ویندوز
* virtual DSO - vDSO

== منابع ==
<references group="" />

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

* 
* 
* *An unsung hero: The hardworking ELF* by Peter Seebach, December 20, 2005, archived from the original on February 24, 2007
* 
* *The ELF Object File Format by Dissection* by Eric Youngdale (1995-05-01)
* *A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux* by Brian Raiter
* [http://www.phrack.org/issues.html?issue=61&id=8#article ELF relocation into non-relocatable objects] by Julien Vanegue (2003-08-13)
* [http://www.phrack.org/issues.html?issue=63&id=9#article Embedded ELF debugging without ptrace] by the ELFsh team (2005-08-01)
* *Study of ELF loading and relocs'' by Pat Beirne (1999-08-03)

## پیوند به بیرون

* FreeBSD Handbook: Binary formats (archived version)
* FreeBSD <tt>elf(5)</tt> manual page
* NetBSD ELF FAQ
* Linux <tt>elf(5)</tt> manual page
* Oracle Solaris Linker and Libraries Guide
* The ERESI project : reverse engineering on ELF-based operating systems 
* Linux Today article on 86open ۲۶ ژوئیه ۱۹۹۹
* Announcement of 86open on Debian Announce mailing list October 10, 1997, Bruce Perens
* Declaration of Ulrich Drepper (PDF) in The SCO Group vs IBM, ۱۹ سپتامبر ۲۰۰۶
* 86open and ELF discussion on Groklaw, ۱۳ اوت ۲۰۰۶

رده:صفحات با ترجمه بازبینی‌نشده
رده:قالب‌های پرونده‌ای اجراپذیر
رده:ویکی‌سازی رباتیک