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

يحتوي ملف ELF على عرضين: يعرض رأس البرنامج المقاطع المستخدمة في وقت التشغيل، بينما يسرد رأس القسم مجموعة الأقسام .

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

صُممت صيغة ELF لتكون مرنة وقابلة للتوسيع ومتوافقة مع مختلف المنصات . على سبيل المثال، تدعم هذه الصيغة ترتيب البايتات وأحجام العناوين المختلفة، مما يجعلها لا تستبعد أي بنية معينة لوحدة المعالجة المركزية أو مجموعة التعليمات . وقد أتاح ذلك اعتمادها من قبل العديد من أنظمة التشغيل المختلفة على العديد من منصات الأجهزة المختلفة .

تخطيط الملف

يتكون كل ملف ELF من رأس ELF واحد، متبوعًا ببيانات الملف. يمكن أن تتضمن البيانات ما يلي:

  • جدول رأس البرنامج، يصف صفرًا أو أكثر من قطاعات الذاكرة
  • جدول عناوين الأقسام، يصف صفرًا أو أكثر من الأقسام
  • البيانات المشار إليها بواسطة الإدخالات في جدول رأس البرنامج أو جدول رأس القسم
بنية ملف ELF مع تمييز المدخلات الرئيسية

تحتوي المقاطع على المعلومات اللازمة لتنفيذ الملف أثناء التشغيل ، بينما تحتوي الأقسام على بيانات مهمة للربط وإعادة التوجيه. يمكن أن يمتلك قسم واحد فقط أي بايت في الملف بأكمله، وقد توجد بايتات يتيمة لا يمتلكها أي قسم.

رأس ملف ELF

يُحدد رأس ملف ELF ما إذا كان سيتم استخدام عناوين 32 بت أو 64 بت . يحتوي الرأس على ثلاثة حقول تتأثر بهذا الإعداد، وتُزيح الحقول الأخرى التي تليها. يبلغ طول رأس ملف ELF 52 بايت للملفات الثنائية 32 بت، و64 بايت للملفات الثنائية 64 بت.

رأس ملف ELF [ 5 ]
إزاحةالحجم (بايت)مجالغاية
32 بت64 بت32 بت64 بت
0x004e_ident[EI_MAG0] إلى e_ident[EI_MAG3]0x7Fمتبوعًا بـ ELF( 45 4c 46) في ASCII ؛ تشكل هذه البايتات الأربعة الرقم السحري .
0x041e_ident[EI_CLASS]يتم تعيين هذا البايت إما إلى 1أو 2للدلالة على تنسيق 32 بت أو 64 بت، على التوالي.
0x051e_ident[EI_DATA]يتم ضبط هذا البايت إما على 1قيمة صغيرة2 أو كبيرة للدلالة على ترتيب البايتات الصغير أو الكبير ، على التوالي. يؤثر هذا على تفسير الحقول متعددة البايتات التي تبدأ بالإزاحة .0x10
0x061e_ident[EI_VERSION]تم ضبطه 1للإصدار الأصلي والحالي من ELF.
0x071e_ident[EI_OSABI]يحدد واجهة التطبيق الثنائية لنظام التشغيل المستهدف .
قيمةABI
0x00النظام الخامس
0x01HP-UX
0x02نظام التشغيل NetBSD
0x03لينكس
0x04جنو هيرد
0x06سولاريس
0x07إيكس (مونتيري)
0x08IRIX
0x09فري بي إس دي
0x0ATru64
0x0Bنوفيل موديستو
0x0Cأوبن بي إس دي
0x0Dأوبن في إم إس
0x0Eنواة بدون توقف
0x0Fآروس
0x10فينيكس أو إس
0x11Nuxi CloudABI
0x12ستراتوس تكنولوجيز أوبن في أو إس
0x081e_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 ]

0x097الهوية الإلكترونية[EI_PAD]بايتات حشو محجوزة. غير مستخدمة حاليًا. يجب ملؤها بالأصفار وتجاهلها عند القراءة.
0x102النوع الإلكترونييحدد نوع ملف الكائن.
قيمةيكتبمعنى
0x00ET_NONEمجهول.
0x01ET_RELملف قابل للنقل.
0x02ET_EXECملف تنفيذي.
0x03ET_DYNكائن مشترك.
0x04ET_COREملف أساسي.
0xFE00ET_LOOSنطاق شامل محجوز. خاص بنظام التشغيل.
0xFEFFET_HIOS
0xFF00ET_LOPROCنطاق شامل محجوز. خاص بالمعالج.
0xFFFFET_HIPROC
0x122الآلة الإلكترونيةيحدد بنية مجموعة التعليمات المستهدفة . بعض الأمثلة هي:
قيمةISA
0x00لا توجد مجموعة تعليمات محددة
0x01AT&T WE 32100
0x02سبارك
0x03x86
0x04موتورولا 68000 (M68k)
0x05موتورولا 88000 (M88k)
0x06وحدة التحكم الدقيقة من إنتل
0x07إنتل 80860
0x08نظام MIPS
0x09نظام IBM/370
0x0AMIPS RS3000 Little-endian
0x0B – 0x0Eمحجوز للاستخدام المستقبلي
0x0Fهيوليت-باكارد بنسلفانيا-ريسك
0x13إنتل 80960
0x14باور بي سي
0x15باور بي سي (64 بت)
0x16S390 ، بما في ذلك S390x
0x17IBM SPU/SPC
0x18 – 0x23محجوز للاستخدام المستقبلي
0x24NEC V800
0x25فوجيتسو FR20
0x26TRW RH-32
0x27موتورولا RCE
0x28Arm (حتى Armv7/AArch32)
0x29ديجيتال ألفا
0x2Aسوبر إتش
0x2Bإصدار SPARC 9
0x2Cمعالج سيمنز تراي كور المدمج
0x2Dمعالج Argonaut RISC
0x2Eهيتاشي H8/300
0x2Fهيتاشي H8/300H
0x30هيتاشي H8S
0x31هيتاشي H8/500
0x32IA-64
0x33ستانفورد MIPS-X
0x34موتورولا كولدفاير
0x35موتورولا M68HC12
0x36مسرّع الوسائط المتعددة لفنون القتال المختلطة من فوجيتسو
0x37سيمنز PCP
0x38معالج سوني المدمج بتقنية RISC nCPU
0x39معالج Denso NDR1 الدقيق
0x3Aمعالج موتورولا ستار كور
0x3Bمعالج تويوتا ME16
0x3Cمعالج ST100 من شركة STMicroelectronics
0x3Dعائلة معالجات TinyJ المدمجة من شركة Advanced Logic Corp.
0x3EAMD x86-64
0x3Fمعالج الإشارات الرقمية من سوني
0x40شركة ديجيتال إكويبمنت، جهاز PDP-10
0x41شركة المعدات الرقمية PDP-11
0x42وحدة التحكم الدقيقة سيمنز FX66
0x43وحدة التحكم الدقيقة ST9+ من شركة STMicroelectronics، ذات 8/16 بت
0x44وحدة التحكم الدقيقة ST7 من شركة STMicroelectronics ذات 8 بت
0x45وحدة التحكم الدقيقة موتورولا MC68HC16
0x46وحدة التحكم الدقيقة موتورولا MC68HC11
0x47وحدة التحكم الدقيقة موتورولا MC68HC08
0x48وحدة التحكم الدقيقة موتورولا MC68HC05
0x49سيليكون غرافيكس إس في إكس
0x4Aوحدة التحكم الدقيقة ST19 من شركة STMicroelectronics ذات 8 بت
0x4Bفاكس الرقمي
0x4Cمعالج مضمن من شركة أكسيس كوميونيكيشنز 32 بت
0x4Dمعالج مضمن من شركة إنفينون تكنولوجيز 32 بت
0x4Eمعالج الإشارات الرقمية Element 14 ذو 64 بت
0x4Fمعالج الإشارات الرقمية LSI Logic ذو 16 بت
0x8Cعائلة TMS320C6000
0xAFMCST Elbrus e2k
0xB7معالجات Arm 64 بت (Armv8/AArch64)
0xDCزيلوج زد 80
0xF3RISC-V
0xF7مرشح حزم بيركلي
0x101WDC 65C816
0x102لونغ آرتش
0x144النسخة الإلكترونيةتم ضبطه 1على الإصدار الأصلي من ELF.
0x1848الدخول الإلكترونيهذا هو عنوان الذاكرة لنقطة الدخول التي يبدأ منها تنفيذ العملية. يبلغ طول هذا الحقل إما 32 أو 64 بت، وذلك حسب التنسيق المحدد مسبقًا (البايت 0x04). إذا لم يكن للملف نقطة دخول مرتبطة به، فإن قيمته تكون صفرًا.
0x1C0x2048إي_فوفيشير إلى بداية جدول رأس البرنامج. وعادةً ما يتبع رأس الملف مباشرةً بعد هذا، مما يجعل الإزاحة 0x34أو 0x40لملفات ELF التنفيذية ذات 32 بت و64 بت، على التوالي.
0x200x2848e_shoffيشير إلى بداية جدول عناوين الأقسام.
0x240x304e_flagsيعتمد تفسير هذا الحقل على بنية النظام المستهدفة.
0x280x342حجم eيحتوي على حجم هذا الرأس، وعادة ما يكون 64 بايت للتنسيق 64 بت و 52 بايت للتنسيق 32 بت.
0x2A0x362حجم الفينيحتوي على حجم مدخل جدول رأس البرنامج. وكما هو موضح أدناه، سيكون هذا عادةً 0x20 (32 بت) أو 0x38 (64 بت).
0x2C0x382e_phnumيحتوي على عدد الإدخالات في جدول رأس البرنامج.
0x2E0x3A2حجم e_shentيحتوي على حجم مدخل جدول رأس القسم. وكما هو موضح أدناه، سيكون هذا عادةً 0x28 (32 بت) أو 0x40 (64 بت).
0x300x3C2e_shnumيحتوي على عدد الإدخالات في جدول رأس القسم.
0x320x3E2e_shstrndxيحتوي على فهرس إدخال جدول رأس القسم الذي يحتوي على أسماء الأقسام.
0x340x40نهاية رأس ملف 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@..... |

[ 10 ]

رأس البرنامج

يُخبر جدول رأس البرنامج النظام بكيفية إنشاء صورة عملية. يوجد هذا الجدول عند إزاحة الملف e_phoff ، ويتكون من e_phnum مدخلًا، حجم كل منها e_phentsize . يختلف التخطيط قليلًا بين ملفات ELF ذات 32 بت و 64 بت ، لأن علامات p_flags موجودة في موقع هيكلي مختلف لأسباب تتعلق بالمحاذاة. كل مدخل مُهيكل على النحو التالي:

رأس البرنامج [ 11 ]
إزاحةالحجم (بايت)مجالغاية
32 بت64 بت32 بت64 بت
0x004نوع pيحدد نوع المقطع.
قيمةاسممعنى
0x00000000PT_NULLإدخال جدول رأس البرنامج غير مستخدم.
0x00000001PT_LOADمقطع قابل للتحميل.
0x00000002PT_DYNAMICمعلومات الربط الديناميكي.
0x00000003PT_INTERPمعلومات المترجم.
0x00000004ملاحظة PTمعلومات إضافية.
0x00000005PT_SHLIBمحجوز.
0x00000006PT_PHDRمقطع يحتوي على جدول رأس البرنامج نفسه.
0x00000007PT_TLSقالب التخزين المحلي للخيوط.
0x60000000PT_LOOSنطاق شامل محجوز. خاص بنظام التشغيل.
0x6FFFFFFFFPT_HIOS
0x70000000PT_LOPROCنطاق شامل محجوز. خاص بالمعالج.
0x7FFFFFFFFPT_HIPROC
0x044p_flagsعلامات تعتمد على القطاع (موضع لبنية 64 بت).
قيمةاسممعنى
0x1PF_Xالجزء القابل للتنفيذ.
0x2PF_Wمقطع قابل للكتابة.
0x4PF_Rمقطع قابل للقراءة.
0x040x0848إزاحة pإزاحة الجزء في صورة الملف.
0x080x1048p_vaddrالعنوان الظاهري للجزء الموجود في الذاكرة.
0x0C0x1848p_paddrفي الأنظمة التي يكون فيها العنوان الفعلي ذا صلة، يتم حجزه للعنوان الفعلي للقطاع.
0x100x2048p_fileszحجم الجزء في صورة الملف بالبايت. قد يكون 0.
0x140x2848p_memszحجم الجزء الموجود في الذاكرة بالبايت. قد يكون 0.
0x184p_flagsعلامات تعتمد على القطاع (موضع لبنية 32 بت). انظر p_flagsالحقل أعلاه لتعريفات العلامات.
0x1C0x3048p_align0ولا 1تحدد أي محاذاة. وإلا فيجب أن يكون قوة صحيحة موجبة للعدد 2، حيث يساوي p_vaddr قيمة p_offset ناقص p_align .
0x200x38نهاية رأس البرنامج (الحجم).

عنوان القسم

إزاحةالحجم (بايت)مجالغاية
32 بت64 بت32 بت64 بت
0x004اسم_الشخصإزاحة لسلسلة نصية في قسم .shstrtab تمثل اسم هذا القسم.
0x044sh_typeيحدد نوع هذا العنوان.
قيمةاسممعنى
0x0SHT_NULLإدخال جدول رأس القسم غير مستخدم
0x1SHT_PROGBITSبيانات البرنامج
0x2SHT_SYMTABجدول الرموز
0x3SHT_STRTABجدول السلاسل
0x4SHT_RELAإدخالات النقل مع الإضافات
0x5SHT_HASHجدول تجزئة الرموز
0x6SHT_DYNAMICمعلومات الربط الديناميكي
0x7ملاحظة من الطبيبملحوظات
0x8SHT_NOBITSمساحة البرنامج بدون بيانات (bss)
0x9SHT_RELإدخالات النقل، بدون إضافات
0x0ASHT_SHLIBمحجوز
0x0BSHT_DYNSYMجدول رموز الرابط الديناميكي
0x0ESHT_INIT_ARRAYمصفوفة من المُنشئات
0x0FSHT_FINI_ARRAYمصفوفة من الدوال المدمرة
0x10SHT_PREINIT_ARRAYمصفوفة من المُنشئات المسبقة
0x11مجموعة SHTمجموعة الأقسام
0x12SHT_SYMTAB_SHNDXفهارس أقسام موسعة
0x13رقم الصفحةعدد الأنواع المحددة.
0x60000000SHT_LOOSابدأ التشغيل الخاص بنظام التشغيل.
.........
0x0848sh_flagsيحدد سمات القسم.
قيمةاسممعنى
0x1SHF_WRITEقابلة للكتابة
0x2SHF_ALLOCيشغل الذاكرة أثناء التنفيذ
0x4SHF_EXECINSTRملف تنفيذي
0x10دمج SHFقد يتم دمجها
0x20SHF_STRINGSيحتوي على سلاسل منتهية بـ null
0x40SHF_INFO_LINKيحتوي 'sh_info' على فهرس SHT
0x80SHF_LINK_ORDERحافظ على الترتيب بعد الدمج
0x100SHF_OS_NONCONFORMINGيلزم التعامل مع أنظمة التشغيل غير القياسية بشكل خاص
0x200مجموعة SHFالقسم عضو في مجموعة
0x400SHF_TLSقسم الاحتفاظ بالبيانات المحلية للخيط
0x0FF00000SHF_MASKOSخاص بنظام التشغيل
0xF0000000SHF_MASKPROCخاص بالمعالج
0x4000000SHF_ORDEREDمتطلبات الطلب الخاصة (سولاريس)
0x8000000استبعاد SHFيُستثنى هذا القسم ما لم تتم الإشارة إليه أو تخصيصه (Solaris)
0x0C0x1048sh_addrالعنوان الظاهري للقسم الموجود في الذاكرة، بالنسبة للأقسام التي يتم تحميلها.
0x100x1848إزاحةإزاحة القسم في صورة الملف.
0x140x2048حجم shحجم القسم بالبايت. قد يكون 0.
0x180x284sh_linkيحتوي على فهرس القسم المرتبط. يُستخدم هذا الحقل لأغراض متعددة، حسب نوع القسم.
0x1C0x2C4sh_infoيحتوي على معلومات إضافية حول القسم. يُستخدم هذا الحقل لأغراض متعددة، وذلك بحسب نوع القسم.
0x200x3048sh_addralignيحتوي على المحاذاة المطلوبة للقسم. يجب أن يكون هذا الحقل من مضاعفات العدد اثنين.
0x240x3848sh_entsizeيحتوي هذا الحقل على حجم كل إدخال بالبايت، وذلك للأقسام التي تحتوي على إدخالات ذات حجم ثابت. وإلا، فإن هذا الحقل يحتوي على صفر.
0x280x40نهاية عنوان القسم (الحجم).

أدوات

  • 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 في أنظمة التشغيل الشبيهة بنظام يونكس .

تبني أنظمة غير يونكس

وقد شهدت تقنية ELF أيضاً بعض الانتشار في أنظمة التشغيل غير يونكس، مثل:

يستخدم نظام التشغيل مايكروسوفت ويندوز أيضًا تنسيق ELF، ولكن فقط لنظام التوافق الخاص به لنظام ويندوز الفرعي لنظام لينكس . [ 18 ]

أجهزة ألعاب الفيديو

تستخدم بعض أجهزة ألعاب الفيديو أيضًا تقنية ELF:

باور بي سي

أنظمة التشغيل الأخرى التي تعمل على معالجات PowerPC والتي تستخدم ELF:

الهواتف المحمولة

تستخدم بعض أنظمة التشغيل للهواتف المحمولة والأجهزة المحمولة ملف ELF:

تستطيع بعض الهواتف تشغيل ملفات 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
  • ملحق ELF لإصدار PA-RISC 1.43 (6 أكتوبر 1997)
باور بي سي
RISC-V
سبارك
  • نظام V ABI، ملحق SPARC
S/390
سلسلة z
نظام التشغيل سيمبيان 9
  • تنسيق ملف E32Image على نظام التشغيل Symbian 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 ]

انظر أيضاً

مراجع

  1. 1 2 معيار واجهة الأدوات (TIS) تنسيق الملفات التنفيذية والربط (ELF) الإصدار 1.2 (مايو 1995)
  2. تنسيق ملف كائن ELF: الملحق ج: سجل المراجعات
  3. معيار واجهة الأدوات (TIS) مواصفات التنسيقات المحمولة الإصدار 1.1 (أكتوبر 1993)
  4. ↑ إصدار واجهة التطبيق الثنائية للنظام الخامس 4.1 (1997-03-18)
  5. "رأس ملف ELF" . Sco.com. يوليو 2000. تم الاطلاع عليه بتاريخ 7 فبراير 2014 .
  6. "LXR linux/include/linux/elf.h" . linux.no . تم ​​الاطلاع عليه بتاريخ 27 أبريل 2015 .
  7. "إعلان glibc 2.12" .
  8. "sourceware.org Git - glibc.git/blob - libc-abis" .
  9. "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h" . مؤرشف من الأصل بتاريخ 2021-03-07 . تم الاطلاع عليه بتاريخ 2019-10-28 .
  10. "المحللات اللغوية المتاحة - Pygments" . pygments.org . تم الاطلاع عليه بتاريخ 19-12-2024 .
  11. "عنوان البرنامج" . Sco.com. يوليو 2000. تم الاطلاع عليه بتاريخ 5 أبريل 2017 .
  12. "elfutils" . sourceware.org . تم الاطلاع عليه بتاريخ 30 أبريل 2017 .
  13. "التنسيقات الثنائية" . مؤرشف من الأصل بتاريخ 31-03-2019 . تم الاطلاع عليه بتاريخ 31-03-2019 .
  14. "MinixReleases – Minix Wiki" . Wiki.minix3.org. مؤرشف من الأصل بتاريخ 30-03-2013 . تم الاطلاع عليه بتاريخ 19-01-2014 .
  15. "حالة منفذ x86_64" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 15 سبتمبر 2020. تم الاطلاع عليه بتاريخ 19 أكتوبر 2016 .
  16. "GCCSDK – RISC OS" . Riscos.info. 22-04-2012. مؤرشف من الأصل في 19-02-2014 . تم الاطلاع عليه في 19-01-2014 .
  17. "دليل مبرمجي غارديان" (ملف PDF) . شركة هيوليت باكارد إنتربرايز. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 30 مايو 2018. تم الاطلاع عليه بتاريخ 30 مايو 2018 .الصفحة 44 مؤرشفة من الأصل. تمت أرشفة الموقع بتاريخ 30 مايو 2018 في أرشيف الإنترنت (Wayback Machine) بتاريخ 30 مايو 2018.
  18. فولي، ماري جو. "نظرة معمقة على نظام ويندوز الفرعي لنظام لينكس من مايكروسوفت" . زد نت . تم الاطلاع عليه بتاريخ 19 أغسطس 2016 .
  19. يستخدم جهاز PlayStation Portable ملفات ELF مشفرة ومنقولة : PSP
  20. تنسيق ملف تنفيذي لنظام التشغيل سيمبيان
  21. روزن، كينيث؛ هوست، دوغلاس؛ كلي، راشيل؛ روزينسكي، ريتشارد (2007). يونكس: المرجع الكامل ( الطبعة الثانية). ماكجرو هيل بروفيشنال. ص 707. ISBN   9780071706988تم الاطلاع عليه بتاريخ 2017-06-08 . تُسمى المكتبات المرتبطة ديناميكيًا أيضًا بالكائنات المشتركة (.so).
  22. توماس، رومان. "تنسيقات أندرويد" . مختبر كواركس . تم الاسترجاع في 17 يناير 2023 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  23. "الفصل 4: ملفات الكائنات" ، واجهة التطبيقات الثنائية لنظام التشغيل System V ، 26-10-2009، e_machine
  24. "برامج سولانا" . مؤسسة سولانا. 11-11-2024 . تم الاطلاع عليه بتاريخ 11-11-2024 . تستفيد سولانا من بنية مُجمِّع LLVM لتجميع البرامج في ملفات بتنسيق قابل للتنفيذ والربط (ELF).
  25. "المواصفات المرجعية لـ LSB" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
  26. "تنسيق الملفات التنفيذية والربط (ELF)" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
  27. "مقدمة" . linuxfoundation.org . تم الاطلاع عليه بتاريخ 27 أبريل 2015 .
  28. ليبوفيتش، إيفان (23 ديسمبر 1997). "86 سؤالًا متكررًا مفتوحًا" . مؤرشف من الأصل في 11 مارس 2007. تم الاطلاع عليه في 6 يونيو 2007 .
  29. ريكورد، رونالد (21 مايو 1998). "نشرة حول حالة الخط 86 المفتوح في مكتب تسجيل المركبات" . مؤرشف من الأصل بتاريخ 8 ديسمبر 2008. تم الاطلاع عليه بتاريخ 6 مايو 2008 .
  30. ليبوفيتش، إيفان (25 يوليو 1999). "مشروع The86open - التحديث النهائي" . مؤرشف من الأصل في 27 فبراير 2007. تم الاطلاع عليه في 6 مايو 2007 .
  31. غوردون، رايان. "مواصفات الذات المميتة الإصدار 1" . icculus.org . تم الاسترجاع في 25-07-2010 .
  32. غوردون، رايان. "فات إلف: اتضح أنني أحببت عدم اليقين أكثر" . icculus.org . تم الاسترجاع في 13 يوليو 2010 .
  33. ^ هولويردا ، توم (2009-11-03). "ريان جوردون يوقف مشروع FatELF" . osnews.com . تم الاسترجاع 2010-07-05 .
  34. بروكماير، جو (23 يونيو 2010). "الذات: تشريح فشل (مزعوم)" . أخبار لينكس الأسبوعية . تم الاسترجاع في 6 فبراير 2011 .

للمزيد من القراءة

  1. "الروابط والمحملات: نموذج التعليمات البرمجية" .{{cite web}}: CS1 maint: deprecated archiveal service ( link )