تنسيق قابل للتنفيذ والربط

في مجال الحوسبة ، يُعد تنسيق الملفات القابلة للتنفيذ والربط [ 3 ] ( ELF ، والذي كان يُسمى سابقًا تنسيق الربط القابل للتوسيع ) تنسيقًا قياسيًا شائعًا للملفات التنفيذية ، ورموز الكائنات ، والمكتبات المشتركة ، وبرامج تشغيل الأجهزة ، وملفات تفريغ الذاكرة . نُشر لأول مرة في مواصفات واجهة التطبيقات الثنائية (ABI) لنظام التشغيل يونكس، الإصدار System V Release 4 (SVR4) [ 4 ] ، ولاحقًا في معيار واجهة الأدوات [ 1 ] ، وسرعان ما لاقى قبولًا واسعًا بين مختلف موردي أنظمة يونكس . في عام 1999، اختاره مشروع 86open ليكون تنسيق الملفات الثنائية القياسي لأنظمة يونكس والأنظمة الشبيهة بيونكس على معالجات x86 .
صُممت صيغة ELF لتكون مرنة وقابلة للتوسيع ومتوافقة مع مختلف المنصات . على سبيل المثال، تدعم هذه الصيغة ترتيب البايتات وأحجام العناوين المختلفة، مما يجعلها لا تستبعد أي بنية معينة لوحدة المعالجة المركزية أو مجموعة التعليمات . وقد أتاح ذلك اعتمادها من قبل العديد من أنظمة التشغيل المختلفة على العديد من منصات الأجهزة المختلفة .
تخطيط الملف
يتكون كل ملف ELF من رأس ELF واحد، متبوعًا ببيانات الملف. يمكن أن تتضمن البيانات ما يلي:
- جدول رأس البرنامج، يصف صفرًا أو أكثر من قطاعات الذاكرة
- جدول عناوين الأقسام، يصف صفرًا أو أكثر من الأقسام
- البيانات المشار إليها بواسطة الإدخالات في جدول رأس البرنامج أو جدول رأس القسم

تحتوي المقاطع على المعلومات اللازمة لتنفيذ الملف أثناء التشغيل ، بينما تحتوي الأقسام على بيانات مهمة للربط وإعادة التوجيه. يمكن أن يمتلك قسم واحد فقط أي بايت في الملف بأكمله، وقد توجد بايتات يتيمة لا يمتلكها أي قسم.
رأس ملف ELF
يُحدد رأس ملف ELF ما إذا كان سيتم استخدام عناوين 32 بت أو 64 بت . يحتوي الرأس على ثلاثة حقول تتأثر بهذا الإعداد، وتُزيح الحقول الأخرى التي تليها. يبلغ طول رأس ملف ELF 52 بايت للملفات الثنائية 32 بت، و64 بايت للملفات الثنائية 64 بت.
| إزاحة | الحجم (بايت) | مجال | غاية | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 بت | 64 بت | 32 بت | 64 بت | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x00 | 4 | e_ident[EI_MAG0] إلى e_ident[EI_MAG3] | 0x7Fمتبوعًا بـ ELF( 45 4c 46) في ASCII ؛ تشكل هذه البايتات الأربعة الرقم السحري . | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x04 | 1 | e_ident[EI_CLASS] | يتم تعيين هذا البايت إما إلى 1أو 2للدلالة على تنسيق 32 بت أو 64 بت، على التوالي. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x05 | 1 | e_ident[EI_DATA] | يتم ضبط هذا البايت إما على 1قيمة صغيرة2 أو كبيرة للدلالة على ترتيب البايتات الصغير أو الكبير ، على التوالي. يؤثر هذا على تفسير الحقول متعددة البايتات التي تبدأ بالإزاحة .0x10 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x06 | 1 | e_ident[EI_VERSION] | تم ضبطه 1للإصدار الأصلي والحالي من ELF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x07 | 1 | e_ident[EI_OSABI] | يحدد واجهة التطبيق الثنائية لنظام التشغيل المستهدف .
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x08 | 1 | e_ident[EI_ABIVERSION] | يُحدد هذا الخيار إصدار واجهة التطبيق الثنائية (ABI). ويعتمد تفسيره على واجهة التطبيق الثنائية المستهدفة. لا تحتوي نواة لينكس (بعد الإصدار 2.6 على الأقل) على تعريف له، [ 6 ] لذا يتم تجاهله بالنسبة للملفات التنفيذية المرتبطة بشكل ثابت. في هذه الحالة، يكون إزاحة وحجم EI_PAD هما 8. في الإصدار 2.12 وما بعده من مكتبة glibc، في حالة كون قيمة e_ident[EI_OSABI] تساوي 3، يتم التعامل مع هذا الحقل كإصدار ABI للرابط الديناميكي : [ 7 ] حيث يُعرّف قائمة بميزات الرابط الديناميكي، [ 8 ] ويتعامل مع e_ident[EI_ABIVERSION] كمستوى ميزة يطلبه الكائن المشترك (الملف التنفيذي أو المكتبة الديناميكية)، ويرفض تحميله إذا طُلب ميزة غير معروفة، أي إذا كانت قيمة e_ident[EI_ABIVERSION] أكبر من أكبر ميزة معروفة. [ 9 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x09 | 7 | الهوية الإلكترونية[EI_PAD] | بايتات حشو محجوزة. غير مستخدمة حاليًا. يجب ملؤها بالأصفار وتجاهلها عند القراءة. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x10 | 2 | النوع الإلكتروني | يحدد نوع ملف الكائن.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x12 | 2 | الآلة الإلكترونية | يحدد بنية مجموعة التعليمات المستهدفة . بعض الأمثلة هي:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x14 | 4 | النسخة الإلكترونية | تم ضبطه 1على الإصدار الأصلي من ELF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x18 | 4 | 8 | الدخول الإلكتروني | هذا هو عنوان الذاكرة لنقطة الدخول التي يبدأ منها تنفيذ العملية. يبلغ طول هذا الحقل إما 32 أو 64 بت، وذلك حسب التنسيق المحدد مسبقًا (البايت 0x04). إذا لم يكن للملف نقطة دخول مرتبطة به، فإن قيمته تكون صفرًا. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x1C | 0x20 | 4 | 8 | إي_فوف | يشير إلى بداية جدول رأس البرنامج. وعادةً ما يتبع رأس الملف مباشرةً بعد هذا، مما يجعل الإزاحة 0x34أو 0x40لملفات ELF التنفيذية ذات 32 بت و64 بت، على التوالي. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x20 | 0x28 | 4 | 8 | e_shoff | يشير إلى بداية جدول عناوين الأقسام. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x24 | 0x30 | 4 | e_flags | يعتمد تفسير هذا الحقل على بنية النظام المستهدفة. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x28 | 0x34 | 2 | حجم e | يحتوي على حجم هذا الرأس، وعادة ما يكون 64 بايت للتنسيق 64 بت و 52 بايت للتنسيق 32 بت. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2A | 0x36 | 2 | حجم الفين | يحتوي على حجم مدخل جدول رأس البرنامج. وكما هو موضح أدناه، سيكون هذا عادةً 0x20 (32 بت) أو 0x38 (64 بت). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2C | 0x38 | 2 | e_phnum | يحتوي على عدد الإدخالات في جدول رأس البرنامج. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x2E | 0x3A | 2 | حجم e_shent | يحتوي على حجم مدخل جدول رأس القسم. وكما هو موضح أدناه، سيكون هذا عادةً 0x28 (32 بت) أو 0x40 (64 بت). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x30 | 0x3C | 2 | e_shnum | يحتوي على عدد الإدخالات في جدول رأس القسم. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x32 | 0x3E | 2 | e_shstrndx | يحتوي على فهرس إدخال جدول رأس القسم الذي يحتوي على أسماء الأقسام. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x34 | 0x40 | نهاية رأس ملف ELF (الحجم). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
مثال على تفريغ البيانات السداسية العشرية
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF............ | 00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 | ..>......H@..... |رأس البرنامج
يُخبر جدول رأس البرنامج النظام بكيفية إنشاء صورة عملية. يوجد هذا الجدول عند إزاحة الملف e_phoff ، ويتكون من e_phnum مدخلًا، حجم كل منها e_phentsize . يختلف التخطيط قليلًا بين ملفات ELF ذات 32 بت و 64 بت ، لأن علامات p_flags موجودة في موقع هيكلي مختلف لأسباب تتعلق بالمحاذاة. كل مدخل مُهيكل على النحو التالي:
| إزاحة | الحجم (بايت) | مجال | غاية | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 بت | 64 بت | 32 بت | 64 بت | |||||||||||||||||||||||||||||||||||||||
| 0x00 | 4 | نوع p | يحدد نوع المقطع.
| |||||||||||||||||||||||||||||||||||||||
| 0x04 | 4 | p_flags | علامات تعتمد على القطاع (موضع لبنية 64 بت).
| |||||||||||||||||||||||||||||||||||||||
| 0x04 | 0x08 | 4 | 8 | إزاحة p | إزاحة الجزء في صورة الملف. | |||||||||||||||||||||||||||||||||||||
| 0x08 | 0x10 | 4 | 8 | p_vaddr | العنوان الظاهري للجزء الموجود في الذاكرة. | |||||||||||||||||||||||||||||||||||||
| 0x0C | 0x18 | 4 | 8 | p_paddr | في الأنظمة التي يكون فيها العنوان الفعلي ذا صلة، يتم حجزه للعنوان الفعلي للقطاع. | |||||||||||||||||||||||||||||||||||||
| 0x10 | 0x20 | 4 | 8 | p_filesz | حجم الجزء في صورة الملف بالبايت. قد يكون 0. | |||||||||||||||||||||||||||||||||||||
| 0x14 | 0x28 | 4 | 8 | p_memsz | حجم الجزء الموجود في الذاكرة بالبايت. قد يكون 0. | |||||||||||||||||||||||||||||||||||||
| 0x18 | 4 | p_flags | علامات تعتمد على القطاع (موضع لبنية 32 بت). انظر p_flagsالحقل أعلاه لتعريفات العلامات. | |||||||||||||||||||||||||||||||||||||||
| 0x1C | 0x30 | 4 | 8 | p_align | 0ولا 1تحدد أي محاذاة. وإلا فيجب أن يكون قوة صحيحة موجبة للعدد 2، حيث يساوي p_vaddr قيمة p_offset ناقص p_align . | |||||||||||||||||||||||||||||||||||||
| 0x20 | 0x38 | نهاية رأس البرنامج (الحجم). | ||||||||||||||||||||||||||||||||||||||||
عنوان القسم
| إزاحة | الحجم (بايت) | مجال | غاية | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 بت | 64 بت | 32 بت | 64 بت | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x00 | 4 | اسم_الشخص | إزاحة لسلسلة نصية في قسم .shstrtab تمثل اسم هذا القسم. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x04 | 4 | sh_type | يحدد نوع هذا العنوان.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x08 | 4 | 8 | sh_flags | يحدد سمات القسم.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x0C | 0x10 | 4 | 8 | sh_addr | العنوان الظاهري للقسم الموجود في الذاكرة، بالنسبة للأقسام التي يتم تحميلها. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x10 | 0x18 | 4 | 8 | إزاحة | إزاحة القسم في صورة الملف. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x14 | 0x20 | 4 | 8 | حجم sh | حجم القسم بالبايت. قد يكون 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x18 | 0x28 | 4 | sh_link | يحتوي على فهرس القسم المرتبط. يُستخدم هذا الحقل لأغراض متعددة، حسب نوع القسم. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x1C | 0x2C | 4 | sh_info | يحتوي على معلومات إضافية حول القسم. يُستخدم هذا الحقل لأغراض متعددة، وذلك بحسب نوع القسم. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x20 | 0x30 | 4 | 8 | sh_addralign | يحتوي على المحاذاة المطلوبة للقسم. يجب أن يكون هذا الحقل من مضاعفات العدد اثنين. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x24 | 0x38 | 4 | 8 | sh_entsize | يحتوي هذا الحقل على حجم كل إدخال بالبايت، وذلك للأقسام التي تحتوي على إدخالات ذات حجم ثابت. وإلا، فإن هذا الحقل يحتوي على صفر. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 0x28 | 0x40 | نهاية عنوان القسم (الحجم). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
أدوات
readelfهي أداة ثنائية لنظام يونكس تعرض معلومات حول ملف واحد أو أكثر من ملفات ELF. وتوفر GNU Binutils تطبيقًا مجانيًا لها .elfutilsيوفر أدوات بديلة لـ GNU Binutils خاصة بنظام Linux فقط. [ 12 ]elfdumpهو أمر لعرض معلومات ELF في ملف ELF، وهو متاح في أنظمة Solaris و FreeBSD .objdumpيوفر مجموعة واسعة من المعلومات حول ملفات ELF وغيرها من تنسيقات الكائنات.objdumpيستخدم مكتبة Binary File Descriptor كخلفية لهيكلة بيانات ELF.- يمكن لأداة Unix
fileعرض بعض المعلومات حول ملفات ELF، بما في ذلك بنية مجموعة التعليمات التي يُقصد بها الكود الموجود في ملف قابل للنقل أو ملف تنفيذي أو ملف كائن مشترك، أو التي تم إنتاج تفريغ أساسي ELF عليها.
التطبيقات
أنظمة شبيهة بنظام يونكس
حلّت صيغة ELF محلّ الصيغ التنفيذية القديمة في بيئات مختلفة. فقد حلّت محلّ صيغتي a.out و COFF في أنظمة التشغيل الشبيهة بنظام يونكس .
- لينكس
- سولاريس / إيلوموس
- IRIX
- FreeBSD [ 13 ]
- نظام التشغيل NetBSD
- أوبن بي إس دي
- الأكسدة والاختزال
- دراجون فلاي بي إس دي
- مقطع لفظي
- HP-UX (باستثناء برامج PA-RISC ذات 32 بت التي تستمر في استخدام SOM )
- نيوترينو QNX
- مينيكس [ 14 ]
تبني أنظمة غير يونكس
وقد شهدت تقنية ELF أيضاً بعض الانتشار في أنظمة التشغيل غير يونكس، مثل:
- OpenVMS ، في إصداراته Itanium و amd64 [ 15 ]
- BeOS Revision 4 والإصدارات اللاحقة لأجهزة الكمبيوتر التي تعمل بنظام x86 (حيث حل محل تنسيق Portable Executable ؛ بينما احتفظ إصدار PowerPC بتنسيق Preferred Executable Format )
- هايكو ، إعادة تنفيذ مفتوحة المصدر لنظام التشغيل BeOS
- RISC OS [ 16 ]
- Stratus VOS ، بإصدارات PA-RISC و x86
- سكاي أو إس
- نظام التشغيل فوشيا
- Z/TPF
- نظام التشغيل HPE NonStop [ 17 ]
- ديوس
يستخدم نظام التشغيل مايكروسوفت ويندوز أيضًا تنسيق ELF، ولكن فقط لنظام التوافق الخاص به لنظام ويندوز الفرعي لنظام لينكس . [ 18 ]
أجهزة ألعاب الفيديو
تستخدم بعض أجهزة ألعاب الفيديو أيضًا تقنية ELF:
- بلاي ستيشن بورتبل ، [ 19 ] بلاي ستيشن فيتا ، بلاي ستيشن ، بلاي ستيشن 2، بلاي ستيشن 3، بلاي ستيشن 4، بلاي ستيشن 5
- GP2X
- دريم كاست
- جيم كيوب
- نينتندو 64
- وي
- وي يو
باور بي سي
أنظمة التشغيل الأخرى التي تعمل على معالجات PowerPC والتي تستخدم ELF:
- في نظام التشغيل AmigaOS 4 ، تم استبدال تنسيق Extended Hunk Format (EHF) السابق الذي كان يستخدم على أجهزة Amiga المجهزة ببطاقات توسيع معالج PPC بملف ELF القابل للتنفيذ .
- مورفوس
- آروس
- نظام التشغيل Café OS (نظام التشغيل الذي يعمل على جهاز Wii U)
الهواتف المحمولة
تستخدم بعض أنظمة التشغيل للهواتف المحمولة والأجهزة المحمولة ملف ELF:
- يستخدم نظام التشغيل Symbian OS v9 تنسيق E32Image [ 20 ] الذي يعتمد على تنسيق ملف ELF؛
- على سبيل المثال، سوني إريكسون ، W800i ، W610، W300 ، إلخ.
- سيمنز ، منصات SGOLD و SGOLD2: من سيمنز C65 إلى S75 و BenQ-Siemens E71/EL71 ؛
- موتورولا ، على سبيل المثال، E398، SLVR L7، v360 ، v3i (وجميع هواتف LTE2 التي تم تطبيق التصحيح عليها).
- على سبيل المثال ، هاتف سامسونج ويف S8500 .
- هواتف أو أجهزة نوكيا اللوحية التي تعمل بنظام التشغيل Maemo أو Meego ، على سبيل المثال، نوكيا N900.
- يستخدم نظام أندرويد مكتبات ELF .so (مكتبة كائن مشترك [ 21 ] ) لواجهة جافا الأصلية . مع بيئة تشغيل أندرويد (ART)، وهي الإعداد الافتراضي منذ أندرويد 5.0 "لولي بوب"، تُجمَّع جميع التطبيقات إلى ملفات ثنائية ELF أصلية عند التثبيت. [ 22 ] من الممكن أيضًا استخدام برامج لينكس الأصلية من مديري الحزم مثل Termux، أو تجميعها من المصادر عبر Clang أو GCC، المتوفرة في المستودعات.
تستطيع بعض الهواتف تشغيل ملفات ELF عبر استخدام رقعة برمجية تُضيف شيفرة تجميعية إلى البرامج الثابتة الرئيسية، وهي ميزة تُعرف باسم ELFPack في أوساط تعديل الأجهزة. يُستخدم تنسيق ملفات ELF أيضًا مع معالجات Atmel AVR (8 بت)، وAVR32 [ 23 ] ، ومع معالجات Texas Instruments MSP430. كما تستطيع بعض تطبيقات Open Firmware تحميل ملفات ELF، وأبرزها تطبيق Apple المُستخدم في جميع أجهزة PowerPC التي أنتجتها الشركة تقريبًا.
منصات البلوك تشين
- تستخدم سولانا تنسيق ELF لبرامجها على سلسلة الكتل ( العقود الذكية ). تعالج المنصة ملفات ELF المُجمّعة إلى بايت كود BPF (مرشح حزم بيركلي)، والتي تُنشر بعد ذلك ككائنات مشتركة وتُنفذ في بيئة تشغيل سولانا. يقوم مُحمّل BPF بالتحقق من صحة ملفات ELF هذه ومعالجتها أثناء نشر البرنامج. [ 24 ]
تحديد
| بنيان | مواصفة |
|---|---|
| نوعي |
|
| AMD64 | |
| ذراع | |
| IA-32 | |
| IA-64 |
|
| M32R |
|
| نظام MIPS |
|
| موتورولا 6800 | |
| PA-RISC |
|
| باور بي سي |
|
| RISC-V | |
| سبارك |
|
| S/390 | |
| سلسلة z | |
| نظام التشغيل سيمبيان 9 |
|
تُكمّل قاعدة لينكس القياسية (LSB) بعض المواصفات المذكورة أعلاه للبنى التي تم تحديدها فيها. [ 25 ] على سبيل المثال، هذا هو الحال بالنسبة لملحق AMD64 الخاص بنظام System V ABI. [ 26 ] [ 27 ]
86 مفتوح
كان مشروع 86open يهدف إلى التوصل إلى توافق في الآراء بشأن تنسيق ملفات ثنائية موحد لأنظمة التشغيل يونكس والأنظمة الشبيهة بيونكس على بنية x86 المتوافقة مع أجهزة الكمبيوتر الشخصية، وذلك لتشجيع مطوري البرامج على نقل برامجهم إلى هذه البنية. [ 28 ] تمثلت الفكرة الأولية في توحيد مجموعة فرعية صغيرة من المواصفة 1170، وهي سابقة لمواصفة يونكس الموحدة، ومكتبة GNU C (glibc) لتمكين تشغيل الملفات الثنائية دون تعديل على أنظمة التشغيل الشبيهة بيونكس x86. وقد سُمي المشروع في الأصل "المواصفة 150".
تم اختيار تنسيق ELF في النهاية، وتحديداً تطبيق Linux لـ ELF، بعد أن تبين أنه معيار فعلي مدعوم من جميع البائعين وأنظمة التشغيل المعنية.
بدأت المجموعة مناقشات عبر البريد الإلكتروني في عام 1997، واجتمعت لأول مرة في مكاتب عمليات سانتا كروز في 22 أغسطس 1997.
تألفت اللجنة التوجيهية من مارك إيوينغ، وديون جونسون، وإيفان ليبوفيتش، وبروس بيرنز ، وأندرو روتش، وبرايان واين سباركس، ولينوس تورفالدز. وشارك في المشروع أيضاً كل من كيث بوستيك، وتشاك كرانور، ومايكل ديفيدسون، وكريس جي. ديميتريو، وأولريش دريبر، ودون دوغر، وستيف غينزبورغ، وجون "ماد دوغ" هول، ورون هولت، وجوردان هوبارد، وديف جنسن، وكين جونستون، وأندرو جوزي، وروبرت ليب، وبيلا لوبكين، وتيم مارسيلاند، وغريغ بيج، ورونالد جو ريكورد، وتيم روكل، وجويل سيلفرشتاين، وشيا-بي تيان، وإريك ترون. وشملت أنظمة التشغيل والشركات الممثلة: BeOS، وBSDI، وFreeBSD، وإنتل ، ولينكس، وNetBSD، وSCO، وسن سوفت.
تقدّم المشروع، وفي منتصف عام ١٩٩٨، بدأت شركة SCO بتطوير lxrun، وهي طبقة توافق مفتوحة المصدر قادرة على تشغيل ملفات لينكس الثنائية على أنظمة OpenServer وUnixWare وSolaris. أعلنت SCO عن دعمها الرسمي لـ lxrun في مؤتمر LinuxWorld في مارس ١٩٩٩. بدأت شركة Sun Microsystems دعم lxrun رسميًا لنظام Solaris في أوائل عام ١٩٩٩، [ ٢٩ ] وانتقلت لاحقًا إلى دعم متكامل لتنسيق ملفات لينكس الثنائية عبر حاويات Solaris لتطبيقات لينكس.
مع دعم أنظمة BSD لثنائيات لينكس لفترة طويلة (من خلال طبقة توافق) وإضافة موردي أنظمة يونكس x86 الرئيسية دعمًا لهذا التنسيق، قرر المشروع أن تنسيق لينكس ELF هو التنسيق الذي اختارته الصناعة و"أعلن حله" في 25 يوليو 1999. [ 30 ]
FatELF: ملفات ثنائية شاملة لنظام لينكس
FatELF هو امتداد لتنسيق ELF الثنائي، يضيف إمكانيات الملفات الثنائية الضخمة . [ 31 ] وهو مُصمم لأنظمة لينكس وأنظمة التشغيل الأخرى الشبيهة بيونكس. بالإضافة إلى تجريد بنية وحدة المعالجة المركزية (ترتيب البايتات، حجم الكلمة، مجموعة تعليمات وحدة المعالجة المركزية ، إلخ)، هناك ميزة محتملة تتمثل في تجريد منصة البرمجيات، على سبيل المثال، الملفات الثنائية التي تدعم إصدارات متعددة من واجهة التطبيق الثنائية (ABI) للنواة. اعتبارًا من عام 2021لم يتم دمج FatELF في نواة لينكس الرئيسية. [ 32 ] [ 33 ] [ 34 ]
انظر أيضاً
- واجهة التطبيق الثنائية
- مقارنة بين تنسيقات الملفات القابلة للتنفيذ
- DWARF – تنسيق لتصحيح أخطاء البيانات
- معيار التوافق الثنائي من إنتل
- ملف تنفيذي محمول – تنسيق يستخدمه نظام التشغيل ويندوز
- vDSO – مكتب توزيع المبيعات الافتراضي
- رمز مستقل عن الموقع
مراجع
- 1 2 معيار واجهة الأدوات (TIS) تنسيق الملفات التنفيذية والربط (ELF) الإصدار 1.2 (مايو 1995)
- ↑ تنسيق ملف كائن ELF: الملحق ج: سجل المراجعات
- ↑ معيار واجهة الأدوات (TIS) مواصفات التنسيقات المحمولة الإصدار 1.1 (أكتوبر 1993)
- ↑ إصدار واجهة التطبيق الثنائية للنظام الخامس 4.1 (1997-03-18)
- ↑ "رأس ملف ELF" . Sco.com. يوليو 2000. تم الاطلاع عليه بتاريخ 7 فبراير 2014 .
- ↑ "LXR linux/include/linux/elf.h" . linux.no . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
- ↑ "إعلان glibc 2.12" .
- ↑ "sourceware.org Git - glibc.git/blob - libc-abis" .
- ↑ "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h" . مؤرشف من الأصل بتاريخ 2021-03-07 . تم الاطلاع عليه بتاريخ 2019-10-28 .
- ↑ "المحللات اللغوية المتاحة - Pygments" . pygments.org . تم الاطلاع عليه بتاريخ 19-12-2024 .
- ↑ "عنوان البرنامج" . Sco.com. يوليو 2000. تم الاطلاع عليه بتاريخ 5 أبريل 2017 .
- ↑ "elfutils" . sourceware.org . تم الاطلاع عليه بتاريخ 30 أبريل 2017 .
- ↑ "التنسيقات الثنائية" . مؤرشف من الأصل بتاريخ 31-03-2019 . تم الاطلاع عليه بتاريخ 31-03-2019 .
- ↑ "MinixReleases – Minix Wiki" . Wiki.minix3.org. مؤرشف من الأصل بتاريخ 30-03-2013 . تم الاطلاع عليه بتاريخ 19-01-2014 .
- ↑ "حالة منفذ x86_64" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 15 سبتمبر 2020. تم الاطلاع عليه بتاريخ 19 أكتوبر 2016 .
- ↑ "GCCSDK – RISC OS" . Riscos.info. 22-04-2012. مؤرشف من الأصل في 19-02-2014 . تم الاطلاع عليه في 19-01-2014 .
- ↑ "دليل مبرمجي غارديان" (ملف PDF) . شركة هيوليت باكارد إنتربرايز. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 30 مايو 2018. تم الاطلاع عليه بتاريخ 30 مايو 2018 .الصفحة 44 مؤرشفة من الأصل. تمت أرشفة الموقع بتاريخ 30 مايو 2018 في أرشيف الإنترنت (Wayback Machine) بتاريخ 30 مايو 2018.
- ↑ فولي، ماري جو. "نظرة معمقة على نظام ويندوز الفرعي لنظام لينكس من مايكروسوفت" . زد نت . تم الاطلاع عليه بتاريخ 19 أغسطس 2016 .
- ↑ يستخدم جهاز PlayStation Portable ملفات ELF مشفرة ومنقولة : PSP
- ↑ تنسيق ملف تنفيذي لنظام التشغيل سيمبيان
- ↑ روزن، كينيث؛ هوست، دوغلاس؛ كلي، راشيل؛ روزينسكي، ريتشارد (2007). يونكس: المرجع الكامل ( الطبعة الثانية). ماكجرو هيل بروفيشنال. ص 707. ISBN 9780071706988تم الاطلاع عليه بتاريخ 2017-06-08 .
تُسمى المكتبات المرتبطة ديناميكيًا أيضًا بالكائنات المشتركة (.so).
- ↑ توماس، رومان. "تنسيقات أندرويد" . مختبر كواركس . تم الاسترجاع في 17 يناير 2023 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "الفصل 4: ملفات الكائنات" ، واجهة التطبيقات الثنائية لنظام التشغيل System V ، 26-10-2009، e_machine
- ↑ "برامج سولانا" . مؤسسة سولانا. 11-11-2024 . تم الاطلاع عليه بتاريخ 11-11-2024 .
تستفيد سولانا من بنية مُجمِّع LLVM لتجميع البرامج في ملفات بتنسيق قابل للتنفيذ والربط (ELF).
- ↑ "المواصفات المرجعية لـ LSB" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
- ↑ "تنسيق الملفات التنفيذية والربط (ELF)" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
- ↑ "مقدمة" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
- ↑ ليبوفيتش، إيفان (23 ديسمبر 1997). "86 سؤالًا متكررًا مفتوحًا" . مؤرشف من الأصل في 11 مارس 2007. تم الاطلاع عليه في 6 يونيو 2007 .
- ↑ ريكورد، رونالد (21 مايو 1998). "نشرة حول حالة الخط 86 المفتوح في مكتب تسجيل المركبات" . مؤرشف من الأصل بتاريخ 8 ديسمبر 2008. تم الاطلاع عليه بتاريخ 6 مايو 2008 .
- ↑ ليبوفيتش، إيفان (25 يوليو 1999). "مشروع The86open - التحديث النهائي" . مؤرشف من الأصل في 27 فبراير 2007. تم الاطلاع عليه في 6 مايو 2007 .
- ↑ غوردون، رايان. "مواصفات الذات المميتة الإصدار 1" . icculus.org . تم الاسترجاع في 25-07-2010 .
- ↑ غوردون، رايان. "فات إلف: اتضح أنني أحببت عدم اليقين أكثر" . icculus.org . تم الاسترجاع في 13 يوليو 2010 .
- ^ هولويردا ، توم (2009-11-03). "ريان جوردون يوقف مشروع FatELF" . osnews.com . تم الاسترجاع 2010-07-05 .
- ↑ بروكماير، جو (23 يونيو 2010). "الذات: تشريح فشل (مزعوم)" . أخبار لينكس الأسبوعية . تم الاسترجاع في 6 فبراير 2011 .
للمزيد من القراءة
- تطور تنسيق ملف الكائن ELF ، بقلم فانغروي سونغ.
- ليفين، جون ر. (2000) [أكتوبر 1999]. الروابط والمحملات . سلسلة مورغان كوفمان في هندسة البرمجيات والبرمجة ( الطبعة الأولى). سان فرانسيسكو، الولايات المتحدة الأمريكية: مورغان كوفمان . ISBN 1-55860-496-0. OCLC 42413382 . تم الاسترجاع في 12 يناير 2020 .
{{cite book}}: CS1 maint: deprecated archiveal service ( link ) Code: [ 1 ]تصحيحات: - أولريش دريبر ، كيفية كتابة المكتبات المشتركة، الإصدار 4.1.2 (2011). نُشر على صفحة المؤلف على الإنترنت، https://www.akkadia.org/drepper .
- بطل مجهول: عامل ELF المجتهد، بقلم بيتر سيباخ، 20 ديسمبر 2005، مؤرشف من الأصل في 24 فبراير 2007
- LibElf و GElf – مكتبة لمعالجة ملفات Elf على Wayback Machine (تمت أرشفة في 25 فبراير 2004)
- تنسيق ملف الكائن ELF: مقدمة ، تنسيق ملف الكائن ELF عن طريق التشريح بقلم إريك يونغديل (1995-05-01)
- دليل سريع لإنشاء ملفات تنفيذية صغيرة جدًا بصيغة ELF لنظام لينكس، بقلم برايان رايتر
- نقل الترددات المنخفضة للغاية إلى أجسام غير قابلة للنقل بواسطة جوليان فانيغ (13-08-2003)
- تصحيح أخطاء ملفات ELF المضمنة بدون ptrace بواسطة فريق ELFsh (2005-08-01)
- دراسة تحميل الترددات المنخفضة للغاية وإعادة التموضع بواسطة بات بيرن (1999-08-03)
روابط خارجية
- مواصفات تنسيق ملف كائن ELF
- تنسيق ملف كائن ELF على GitHub
- واجهة التطبيق الثنائية لنظام التشغيل V وتعريف الواجهة
- دليل نظام FreeBSD: التنسيقات الثنائية (نسخة مؤرشفة)
- صفحة دليل برنامج elf(5) لنظام FreeBSD
- الأسئلة الشائعة حول ملفات ELF لنظام NetBSD
- دليل استخدام Linux elf(5)
- دليل أوراكل سولاريس للربط والمكتبات
- مشروع ERESI: الهندسة العكسية لأنظمة التشغيل القائمة على ELF. مؤرشف بتاريخ 14 مارس 2021 في أرشيف الإنترنت (Wayback Machine).
- مقال من موقع Linux Today حول مشروع 86open، مؤرشف بتاريخ 2021-03-08 في أرشيف Wayback Machine بتاريخ 26 يوليو 1999
- إعلان عن نظام 86open على قائمة بريد دبيان للإعلانات ، 10 أكتوبر 1997، بقلم بروس بيرنز
- إعلان أولريش دريبر (ملف PDF) في قضية مجموعة SCO ضد شركة IBM ، 19 سبتمبر 2006
- نقاش بين 86open وELF حول Groklaw ، 13 أغسطس 2006
- ↑ "الروابط والمحملات: نموذج التعليمات البرمجية" .
{{cite web}}: CS1 maint: deprecated archiveal service ( link )
- تنسيقات الملفات القابلة للتنفيذ
