Scroll to navigation

ELF(5) File Formats Manual ELF(5)

الاسم

elf - تنسيق ملفات التنسيق التنفيذي والقابل للربط (ELF)

موجز

#include <elf.h>

الوصف

يحدد ملف الترويسة <elf.h> تنسيق ملفات ELF الثنائية القابلة للتنفيذ. ومن بين هذه الملفات الملفات التنفيذية العادية، وملفات الكائنات القابلة للنقل، وملفات اللب (core)، والكائنات المشتركة.

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

يصف ملف الترويسة هذا الترويسات المذكورة أعلاه كبنى بلغة C ويتضمن أيضًا بنى للأقسام الديناميكية، وأقسام إعادة النقل، وجداول الرموز.

الأنواع الأساسية

تُستخدم الأنواع التالية لبنيات N-بت (N=32,64، حيث يرمز ElfN إلى Elf32 أو Elf64، ويرمز uintN_t إلى uint32_t أو uint64_t):


ElfN_Addr       عنوان برنامج غير موقع، uintN_t
ElfN_Off        إزاحة ملف غير موقعة، uintN_t
ElfN_Section    فهرس قسم غير موقع، uint16_t
ElfN_Versym     معلومات رمز الإصدار غير الموقعة، uint16_t
Elf_Byte        unsigned char
ElfN_Half       uint16_t
ElfN_Sword      int32_t
ElfN_Word       uint32_t
ElfN_Sxword     int64_t
ElfN_Xword      uint64_t

(ملاحظة: تختلف مصطلحات *BSD قليلاً. هناك، يكون Elf64_Half ضعف حجم Elf32_Half، ويُستخدم Elf64Quarter لـ uint16_t. لتجنب اللبس، استُبدلت هذه الأنواع بأنواع صريحة فيما يلي.)

تتبع جميع بنى البيانات التي يحددها تنسيق الملف إرشادات الحجم والمحاذاة "الطبيعية" للفئة ذات الصلة. وإذا لزم الأمر، تحتوي بنى البيانات على حشو صريح لضمان محاذاة 4-بايت للكائنات ذات الـ 4-بايت، ولإجبار أحجام البنى على أن تكون مضاعفة للعدد 4، وما إلى ذلك.

تروِيسة ELF‏ (Ehdr)

تُوصَف ترويسة ELF بواسطة النوع Elf32_Ehdr أو Elf64_Ehdr:


#define EI_NIDENT 16
typedef struct {

unsigned char e_ident[EI_NIDENT];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
ElfN_Addr e_entry;
ElfN_Off e_phoff;
ElfN_Off e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx; } ElfN_Ehdr;

تحمل الحقول المعاني التالية:

تحدد مصفوفة البايتات هذه كيفية تفسير الملف، بشكل مستقل عن المعالج أو محتويات الملف المتبقية. ويُسمى كل شيء داخل هذه المصفوفة بواسطة ماكروهات تبدأ بالبادئة EI_ وقد تحتوي على قيم تبدأ بالبادئة ELF. تُعرَّف الماكروهات التالية:
البايت الأول من الرقم السحري. يجب ملؤه بـ ELFMAG0. ‏(0: 0x7f)
البايت الثاني من الرقم السحري. يجب ملؤه بـ ELFMAG1. ‏(1: 'E')
البايت الثالث من الرقم السحري. يجب ملؤه بـ ELFMAG2. ‏(2: 'L')
البايت الرابع من الرقم السحري. يجب ملؤه بـ ELFMAG3. ‏(3: 'F')
يحدد البايت الخامس بنية هذا الملف الثنائي:
ELFCLASSNONE
هذه الفئة غير صالحة.
يحدد هذا بنية 32-بت. وهو يدعم الأجهزة ذات الملفات ومساحات العناوين الافتراضية التي تصل إلى 4 جيجابايت.
يحدد هذا بنية 64-بت.
يحدد البايت السادس ترميز البيانات الخاصة بالمعالج في الملف. وحاليًا، تُدعم هذه الترميزات:
ELFDATANONE
تنسيق بيانات مجهول.
المكمل الاثني، نهاية الصغرى (little-endian).
المكمل الاثني، نهاية الكبرى (big-endian).
البايت السابع هو رقم إصدار مواصفات ELF:
إصدار غير صالح.
الإصدار الحالي.
يحدد البايت الثامن نظام التشغيل وواجهة التطبيق الثنائية (ABI) التي يستهدفها هذا الكائن. تحتوي بعض الحقول في بنى ELF الأخرى على أعلام وقيم لها معانٍ خاصة بالمنصة؛ ويُحدد تفسير تلك الحقول بناءً على قيمة هذا البايت. على سبيل المثال:
ELFOSABI_NONE
نفس ELFOSABI_SYSV
واجهة التطبيق الثنائية UNIX System V ABI
HP-UX ABI
NetBSD ABI
لينكس ABI
سولاريس ABI
IRIX ABI
FreeBSD ABI
TRU64 UNIX ABI
بنية إيه آر إم ABI
واجهة تطبيق ثنائية مستقلة (مدمجة)
يحدد البايت التاسع إصدار واجهة التطبيق الثنائية (ABI) التي يستهدفها الكائن. يُستخدم هذا الحقل للتمييز بين الإصدارات غير المتوافقة من الـ ABI. ويعتمد تفسير رقم الإصدار هذا على الـ ABI المحدد في الحقل EI_OSABI. وتستخدم التطبيقات المتوافقة مع هذه المواصفة القيمة 0.
بداية الحشو. هذه البايتات محجوزة وضُبطت على الصفر. ويجب على البرامج التي تقرأها أن تتجاهلها. ستتغير قيمة EI_PAD في المستقبل إذا أُعطيت معانٍ للبايتات غير المستخدمة حاليًا.
حجم مصفوفة e_ident.
يحدد هذا العضو من البنية نوع ملف الكائن:
ET_NONE
نوع مجهول.
ملف قابل للنقل.
ملف تنفيذي.
كائن مشترك.
ملف لب (core).
يحدد هذا العضو البنية المطلوبة لملف فردي. على سبيل المثال:
EM_NONE
آلة مجهولة
AT&T WE 32100
Sun Microsystems SPARC
Intel 80386
Motorola 68000
Motorola 88000
Intel 80860
MIPS RS3000 (نهاية كبرى فقط)
HP/PA
SPARC مع مجموعة تعليمات محسنة
PowerPC
PowerPC بقوة 64-بت
IBM S/390
Advanced RISC Machines (ARM)
Renesas SuperH
SPARC v9 بقوة 64-بت
Intel Itanium
AMD x86-64
DEC Vax
يحدد هذا العضو إصدار الملف:
EV_NONE
إصدار غير صالح
الإصدار الحالي
يعطي هذا العضو العنوان الافتراضي الذي ينقل النظام إليه التحكم أولاً، وبذلك تبدأ العملية. إذا لم يكن للملف نقطة دخول مرتبطة به، فإن هذا العضو يحتفظ بالقيمة صفر.
يحتفظ هذا العضو بإزاحة ملف جدول ترويسة البرنامج بالبايت. إذا لم يكن للملف جدول ترويسة برنامج، فإن هذا العضو يحتفظ بالقيمة صفر.
يحتفظ هذا العضو بإزاحة ملف جدول ترويسة الأقسام بالبايت. إذا لم يكن للملف جدول ترويسة أقسام، فإن هذا العضو يحتفظ بالقيمة صفر.
يحتفظ هذا العضو بأعلام خاصة بالمعالج مرتبطة بالملف. تأخذ أسماء الأعلام الشكل EF_`machine_flag'. وحاليًا، لم تُعرَّف أي أعلام.
يحتفظ هذا العضو بحجم ترويسة ELF بالبايت.
يحتفظ هذا العضو بالحجم بالبايت لمدخل واحد في جدول ترويسة البرنامج الخاص بالملف؛ وتكون جميع المداخل بنفس الحجم.
يحتفظ هذا العضو بعدد المداخل في جدول ترويسة البرنامج. وبذلك، فإن حاصل ضرب e_phentsize في e_phnum يعطي حجم الجدول بالبايت. إذا لم يكن للملف ترويسة برنامج، فإن e_phnum يحتفظ بالقيمة صفر.
إذا كان عدد المداخل في جدول ترويسة البرنامج أكبر من أو يساوي PN_XNUM ‏(0xffff)، فإن هذا العضو يحتفظ بالقيمة PN_XNUM ‏(0xffff) ويُحفظ العدد الحقيقي للمداخل في العضو sh_info للمدخل الأولي في جدول ترويسة الأقسام. وخلاف ذلك، يحتوي العضو sh_info للمدخل الأولي على القيمة صفر.
يُعرَّف هذا بالقيمة 0xffff، وهو أكبر رقم يمكن أن يحمله e_phnum، محددًا المكان الذي يُعين فيه العدد الفعلي لترويسات البرنامج.
يحتفظ هذا العضو بحجم ترويسة الأقسام بالبايت. ترويسة القسم هي مدخل واحد في جدول ترويسة الأقسام؛ وجميع المداخل تكون بنفس الحجم.
يحتفظ هذا العضو بعدد المداخل في جدول ترويسة الأقسام. وبذلك، فإن حاصل ضرب e_shentsize في e_shnum يعطي حجم جدول ترويسة الأقسام بالبايت. إذا لم يكن للملف جدول ترويسة أقسام، فإن e_shnum يحتفظ بالقيمة صفر.
إذا كان عدد المداخل في جدول ترويسة الأقسام أكبر من أو يساوي SHN_LORESERVE ‏(0xff00)، فإن e_shnum يحتفظ بالقيمة صفر ويُحفظ العدد الحقيقي للمداخل في العضو sh_size للمدخل الأولي في جدول ترويسة الأقسام. وخلاف ذلك، يحتفظ العضو sh_size للمدخل الأولي في جدول ترويسة الأقسام بالقيمة صفر.
يحتفظ هذا العضو بفهرس جدول ترويسة الأقسام للمدخل المرتبط بجدول سلاسل أسماء الأقسام. إذا لم يكن للملف جدول سلاسل أسماء أقسام، فإن هذا العضو يحتفظ بالقيمة SHN_UNDEF.
إذا كان فهرس قسم جدول سلاسل أسماء الأقسام أكبر من أو يساوي SHN_LORESERVE ‏(0xff00)، فإن هذا العضو يحتفظ بالقيمة SHN_XINDEX ‏(0xffff) ويُحفظ الفهرس الحقيقي لقسم جدول سلاسل أسماء الأقسام في العضو sh_link للمدخل الأولي في جدول ترويسة الأقسام. وخلاف ذلك، يحتوي العضو sh_link للمدخل الأولي في جدول ترويسة الأقسام على القيمة صفر.

تروِيسة البرنامج (Phdr)

جدول ترويسة البرنامج للملف التنفيذي أو كائن مشترك هو مصفوفة من البنى، تصف كل منها شريحة (segment) أو معلومات أخرى يحتاجها النظام لإعداد البرنامج للتنفيذ. تحتوي شريحة ملف الكائن على قسم واحد أو أكثر من الأقسام. وتكون ترويسات البرنامج ذات مغزى فقط للملفات التنفيذية وملفات الكائنات المشتركة. ويحدد الملف حجم ترويسة البرنامج الخاصة به باستخدام العضوين e_phentsize و e_phnum في ترويسة ELF. تُوصَف ترويسة برنامج ELF بواسطة النوع Elf32_Phdr أو Elf64_Phdr اعتمادًا على البنية:


typedef struct {

uint32_t p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
uint32_t p_filesz;
uint32_t p_memsz;
uint32_t p_flags;
uint32_t p_align; } Elf32_Phdr;


typedef struct {

uint32_t p_type;
uint32_t p_flags;
Elf64_Off p_offset;
Elf64_Addr p_vaddr;
Elf64_Addr p_paddr;
uint64_t p_filesz;
uint64_t p_memsz;
uint64_t p_align; } Elf64_Phdr;

يكمن الاختلاف الرئيس بين ترويسة البرنامج لـ 32-بت و 64-بت في موقع العضو p_flags في البنية الكلية.

يشير هذا العضو من البنية إلى نوع الشريحة التي يصفها عنصر المصفوفة هذا أو كيفية تفسير معلومات عنصر المصفوفة.
يكون عنصر المصفوفة غير مستخدم وتكون قيم الأعضاء الأخرى غير محددة. يتيح هذا لترويسة البرنامج احتواء مداخل مُتجاهَلة.
يحدد عنصر المصفوفة شريحة قابلة للتحميل، موصوفة بواسطة p_filesz و p_memsz. تُقابَل البايتات من الملف إلى بداية شريحة الذاكرة. إذا كان حجم ذاكرة الشريحة p_memsz أكبر من حجم الملف p_filesz، تُعرَّف البايتات "الزائدة" لتحمل القيمة 0 وتتبع المنطقة المهيأة للشريحة. ولا يجوز أن يكون حجم الملف أكبر من حجم الذاكرة. تظهر مداخل الشريحة القابلة للتحميل في جدول ترويسة البرنامج بترتيب تصاعدي، فرزًا بناءً على العضو p_vaddr.
يحدد عنصر المصفوفة معلومات الربط الديناميكي.
يحدد عنصر المصفوفة موقع وحجم مسار منتهٍ بـ null لاستدعائه كمفسر. يكون نوع الشريحة هذا ذو مغزى فقط للملفات التنفيذية (رغم أنه قد يحدث للكائنات المشتركة). ومع ذلك، لا يجوز أن يحدث أكثر من مرة واحدة في الملف. وإذا كان موجودًا، فيجب أن يسبق أي مدخل شريحة قابلة للتحميل.
يحدد عنصر المصفوفة موقع الملاحظات (ElfN_Nhdr).
هذا النوع من الشرائح محجوز ولكن لديه دلالات غير محددة. البرامج التي تحتوي على عنصر مصفوفة من هذا النوع لا تتوافق مع واجهة التطبيق الثنائية (ABI).
يحدد عنصر المصفوفة، إذا كان موجودًا، موقع وحجم جدول ترويسة البرنامج نفسه، سواء في الملف أو في صورة الذاكرة للبرنامج. لا يجوز أن يحدث نوع الشريحة هذا أكثر من مرة واحدة في الملف. علاوة على ذلك، لا يمكن أن يحدث إلا إذا كان جدول ترويسة البرنامج جزءًا من صورة الذاكرة للبرنامج. وإذا كان موجودًا، فيجب أن يسبق أي مدخل شريحة قابلة للتحميل.
القيم في النطاق الشامل [PT_LOPROC،‏ PT_HIPROC] محجوزة لدلالات خاصة بالمعالج.
امتداد GNU تستخدمه نواة لينكس للتحكم في حالة المكدس عبر الأعلام المحددة في العضو p_flags.
يحتفظ هذا العضو بالإزاحة من بداية الملف التي يقع عندها البايت الأول من الشريحة.
يحتفظ هذا العضو بالفهرس الافتراضي الذي يقع عنده البايت الأول من الشريحة في الذاكرة.
في الأنظمة التي تكون فيها العنونة المادية ذات صلة، يكون هذا العضو محجوزًا للعنوان المادي للشريحة. وتحت نظام BSD، لا يُستخدم هذا العضو ويجب أن يكون صفرًا.
يحتفظ هذا العضو بعدد البايتات في صورة الملف للشريحة. وقد يكون صفرًا.
يحتفظ هذا العضو بعدد البايتات في صورة الذاكرة للشريحة. وقد يكون صفرًا.
يحتفظ هذا العضو بقناع بت للأعلام ذات الصلة بالشريحة:
PF_X
شريحة قابلة للتنفيذ.
شريحة قابلة للكتابة.
شريحة قابلة للقراءة.
تحتوي شريحة النص عادةً على الأعلام PF_X و PF_R. وتحتوي شريحة البيانات عادةً على PF_W و PF_R.
يحتفظ هذا العضو بالقيمة التي تُحاذى الشرائح وفقًا لها في الذاكرة وفي الملف. يجب أن تكون للشرائح العملية القابلة للتحميل قيم متطابقة لـ p_vaddr و p_offset بمقياس (modulo) حجم الصفحة. تعني القيم صفر وواحد أنه لا يلزم إجراء محاذاة. خلاف ذلك، ينبغي أن يكون p_align قوة عددية صحيحة موجبة للعدد اثنين، وينبغي أن يساوي p_vaddr القيمة p_offset بمقياس p_align.

تروِيسة القسم (Shdr)

يتيح جدول ترويسات الأقسام الخاص بالملف العثور على جميع أقسام الملف. جدول ترويسات الأقسام عبارة عن مصفوفة من هياكل Elf32_Shdr أو Elf64_Shdr. يحدد الحقل e_shoff في ترويسة ELF إزاحة البايت من بداية الملف إلى جدول ترويسات الأقسام. ويحتوي الحقل e_shnum على عدد المدخلات التي يضمها جدول ترويسات الأقسام. بينما يحتوي الحقل e_shentsize على حجم كل مدخلة بالبايت.

مؤشر جدول ترويسات الأقسام هو دليل منخفض (subscript) في هذه المصفوفة. بعض مؤشرات جدول ترويسات الأقسام محجوزة: المدخلة المبدئية والمؤشرات الواقعة بين SHN_LORESERVE و SHN_HIRESERVE. تُستخدم المدخلة المبدئية في امتدادات ELF لكل من e_phnum و e_shnum و e_shstrndx؛ وفي الحالات الأخرى، يُضبط كل حقل في المدخلة المبدئية على الصفر. لا يحتوي ملف الكائنات (object file) على أقسام لهذه المؤشرات الخاصة:

تحدد هذه القيمة مرجع قسم غير معرف، أو مفقود، أو غير ذي صلة، أو ليس له معنى بأي شكل آخر.
تحدد هذه القيمة الحد الأدنى لنطاق المؤشرات المحجوزة.
القيم الأكبر في النطاق الشامل [SHN_LOPROC، SHN_HIPROC] محجوزة لدلالات خاصة بالمعالج.
تحدد هذه القيمة القيمة المطلقة للمرجع المقابل. على سبيل المثال، الرمز المعرّف بالنسبة لرقم القسم SHN_ABS له قيمة مطلقة ولا يتأثر بإعادة التوطين.
الرموز المعرّفة بالنسبة لهذا القسم هي رموز مشتركة، مثل FORTRAN COMMON أو متغيرات C الخارجية غير المخصصة.
تحدد هذه القيمة الحد الأقصى لنطاق المؤشرات المحجوزة. يحجز النظام المؤشرات بين SHN_LORESERVE و SHN_HIRESERVE، بأسلوب شامل. لا يحتوي جدول ترويسات الأقسام على مدخلات للمؤشرات المحجوزة.

تحتوي ترويسة القسم على الهيكل التالي:


typedef struct {

uint32_t sh_name;
uint32_t sh_type;
uint32_t sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
uint32_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint32_t sh_addralign;
uint32_t sh_entsize; } Elf32_Shdr;


typedef struct {

uint32_t sh_name;
uint32_t sh_type;
uint64_t sh_flags;
Elf64_Addr sh_addr;
Elf64_Off sh_offset;
uint64_t sh_size;
uint32_t sh_link;
uint32_t sh_info;
uint64_t sh_addralign;
uint64_t sh_entsize; } Elf64_Shdr;

لا توجد فروق حقيقية بين ترويسات الأقسام ذات الـ 32 بت والـ 64 بت.

يحدد هذا العضو اسم القسم. قيمته عبارة عن مؤشر داخل قسم جدول سلاسل ترويسة القسم، مما يعطي موقع سلسلة منتهية بمحرف صفري.
يصنف هذا العضو محتويات القسم ودلالاته.
تحدد هذه القيمة ترويسة القسم على أنها غير نشطة. ليس لديها قسم مرتبط بها. الأعضاء الآخرون لترويسة القسم لديهم قيم غير معرفة.
يحتوي هذا القسم على معلومات معرّفة بواسطة البرنامج، والتي يحدد البرنامج وحده تنسيقها ومعناها.
يحتوي هذا القسم على جدول رموز. عادةً، يوفر SHT_SYMTAB رموزًا لتحرير الروابط، وإن كان يمكن استخدامه أيضًا للربط الديناميكي. وبصفته جدول رموز كاملاً، فقد يحتوي على العديد من الرموز غير الضرورية للربط الديناميكي. يمكن لملف الكائنات أيضًا أن يحتوي على قسم SHT_DYNSYM. يمكن العثور على مؤشر قسم جدول السلاسل المرتبط في العضو sh_link.
يحتوي هذا القسم على جدول سلاسل. قد يحتوي ملف الكائنات على أقسام متعددة لجدول السلاسل.
يحتوي هذا القسم على مدخلات إعادة التوطين مع مضافات صريحة، مثل النوع Elf32_Rela لفئة ملفات الكائنات ذات الـ 32 بت. قد يحتوي الكائن على أقسام إعادة توطين متعددة.
يحتوي هذا القسم على جدول تلبيد الرموز. يجب أن يحتوي الكائن المشارك في الربط الديناميكي على جدول تلبيد رموز. يمكن لملف الكائنات أن يحتوي على جدول تلبيد واحد فقط.
يحتوي هذا القسم على معلومات للربط الديناميكي. يمكن لملف الكائنات أن يحتوي على قسم ديناميكي واحد فقط.
يحتوي هذا القسم على ملاحظات (ElfN_Nhdr).
لا يشغل قسم من هذا النوع أي مساحة في الملف ولكنه يشبه خلاف ذلك SHT_PROGBITS. على الرغم من أن هذا القسم لا يحتوي على أي بايتات، فإن العضو sh_offset يحتوي على إزاحة الملف المفاهيمية.
يحتوي هذا القسم على إزاحات إعادة التوطين بدون مضافات صريحة، مثل النوع Elf32_Rel لفئة ملفات الكائنات ذات الـ 32 بت. قد يحتوي ملف الكائنات على أقسام إعادة توطين متعددة.
هذا القسم محجوز ولكن له دلالات غير محددة.
يحتوي هذا القسم على حد أدنى من رموز الربط الديناميكي. يمكن لملف الكائنات أيضًا أن يحتوي على قسم SHT_SYMTAB.
القيم في النطاق الشامل [SHT_LOPROC، SHT_HIPROC] محجوزة لدلالات خاصة بالمعالج.
تحدد هذه القيمة الحد الأدنى لنطاق المؤشرات المحجوزة لبرامج التطبيقات.
تحدد هذه القيمة الحد الأقصى لنطاق المؤشرات المحجوزة لبرامج التطبيقات. يمكن استخدام أنواع الأقسام الواقعة بين SHT_LOUSER و SHT_HIUSER بواسطة التطبيق، دون التعارض مع أنواع الأقسام الحالية أو المستقبلية المعرّفة من قبل النظام.
تدعم الأقسام لافتات ذات بت واحد تصف سمات متنوعة. إذا ضُبط بت اللافتة في sh_flags، تكون السمة نشطة "on" للقسم. وخلاف ذلك، تكون السمة معطلة "off" أو لا تنطبق. تُضبط السمات غير المعرفة على الصفر.
يحتوي هذا القسم على بيانات يجب أن تكون قابلة للكتابة أثناء تنفيذ العملية.
يشغل هذا القسم ذاكرة أثناء تنفيذ العملية. بعض أقسام التحكم لا تقيم في صورة الذاكرة لملف الكائنات. تكون هذه السمة معطلة لتلك الأقسام.
يحتوي هذا القسم على تعليمات آلة قابلة للتنفيذ.
جميع البتات المضمنة في هذا القناع محجوزة لدلالات خاصة بالمعالج.
إذا ظهر هذا القسم في صورة الذاكرة لعملية ما، فإن هذا العضو يحتوي على العنوان الذي يجب أن يستقر فيه البايت الأول من القسم. وخلاف ذلك، يحتوي العضو على الصفر.
تحتوي قيمة هذا العضو على إزاحة البايت من بداية الملف إلى البايت الأول في القسم. هناك نوع قسم واحد، وهو SHT_NOBITS، لا يشغل أي مساحة في الملف، ويحدد العضو sh_offset الخاص به الموضع المفاهيمي في الملف.
يحتوي هذا العضو على حجم القسم بالبايت. ما لم يكن نوع القسم هو SHT_NOBITS، يشغل القسم عدد sh_size من البايتات في الملف. قد يكون لقسم من النوع SHT_NOBITS حجم غير صفري، لكنه لا يشغل مساحة في الملف.
يحتوي هذا العضو على رابط لمؤشر جدول ترويسات الأقسام، ويعتمد تفسيره على نوع القسم.
يحتوي هذا العضو على معلومات إضافية، ويعتمد تفسيرها على نوع القسم.
بعض الأقسام تفرض قيودًا على محاذاة العنوان. إذا كان القسم يحتوي على كلمة مزدوجة (doubleword)، يجب على النظام ضمان محاذاة الكلمة المزدوجة للقسم بأكمله. أي أن قيمة sh_addr يجب أن تكون متطابقة مع الصفر بمقیاس قيمة sh_addralign. يُسمح فقط بالقوى الصحيحة الموجبة والصفرية للعدد اثنين. تعني القيمة 0 أو 1 أن القسم ليس لديه قيود على المحاذاة.
تحتوي بعض الأقسام على جدول لمدخلات ذات حجم ثابت، مثل جدول الرموز. لمثل هذا القسم، يعطي هذا العضو الحجم بالبايت لكل مدخلة. يحتوي هذا العضو على الصفر إذا كان القسم لا يحتوي على جدول لمدخلات ذات حجم ثابت.

تحتوي أقسام متنوعة على معلومات البرنامج والتحكم:

.bss
يحتوي هذا القسم على بيانات غير مهيأة تساهم في صورة ذاكرة البرنامج. بحسب التعريف، يُهيئ النظام البيانات بالأصفار عندما يبدأ البرنامج في العمل. هذا القسم من النوع SHT_NOBITS. أنواع السمات هي SHF_ALLOC و SHF_WRITE.
.comment
يحتوي هذا القسم على معلومات التحكم في الإصدار. هذا القسم من النوع SHT_PROGBITS. لا تُستخدم أي أنواع سمات.
.ctors
يحتوي هذا القسم على مؤشرات مهيأة لدوال البناء (constructor functions) في لغة ++C. هذا القسم من النوع SHT_PROGBITS. أنواع السمات هي SHF_ALLOC و SHF_WRITE.
.data
يحتوي هذا القسم على بيانات مهيأة تساهم في صورة ذاكرة البرنامج. هذا القسم من النوع SHT_PROGBITS. أنواع السمات هي SHF_ALLOC و SHF_WRITE.
.data1
يحتوي هذا القسم على بيانات مهيأة تساهم في صورة ذاكرة البرنامج. هذا القسم من النوع SHT_PROGBITS. أنواع السمات هي SHF_ALLOC و SHF_WRITE.
.debug
يحتوي هذا القسم على معلومات للتنقيح الرمزي. المحتويات غير محددة. هذا القسم من النوع SHT_PROGBITS. لا تُستخدم أي أنواع سمات.
.dtors
يحتوي هذا القسم على مؤشرات مهيأة لدوال الهدم (destructor functions) في لغة ++C. هذا القسم من النوع SHT_PROGBITS. أنواع السمات هي SHF_ALLOC و SHF_WRITE.
.dynamic
يحتوي هذا القسم على معلومات الربط الديناميكي. ستتضمن سمات القسم بت SHF_ALLOC. تحديد ما إذا كان بت SHF_WRITE مضبوطًا أم لا هو أمر خاص بالمعالج. هذا القسم من النوع SHT_DYNAMIC. انظر السمات أعلاه.
.dynstr
يحتوي هذا القسم على السلاسل اللازمة للربط الديناميكي، وهي في الغالب السلاسل التي تمثل الأسماء المرتبطة بمدخلات جدول الرموز. هذا القسم من النوع SHT_STRTAB. نوع السمة المستخدمة هو SHF_ALLOC.
.dynsym
يحتوي هذا القسم على جدول رموز الربط الديناميكي. هذا القسم من النوع SHT_DYNSYM. السمة المستخدمة هي SHF_ALLOC.
.fini
يحتوي هذا القسم على تعليمات قابلة للتنفيذ تساهم في كود إنهاء العملية. عندما ينتهي البرنامج بشكل طبيعي، يقوم النظام بالترتيب لتنفيذ الكود الموجود في هذا القسم. هذا القسم من النوع SHT_PROGBITS. السمات المستخدمة هي SHF_ALLOC و SHF_EXECINSTR.
.gnu.version
يحتوي هذا القسم على جدول رموز الإصدار، وهو مصفوفة من عناصر ElfN_Half. هذا القسم من النوع SHT_GNU_versym. نوع السمة المستخدم هو SHF_ALLOC.
.gnu.version_d
يحتوي هذا القسم على تعريفات رموز الإصدار، وهو جدول من هياكل ElfN_Verdef. هذا القسم من النوع SHT_GNU_verdef. نوع السمة المستخدم هو SHF_ALLOC.
.gnu.version_r
يحتوي هذا القسم على عناصر رموز الإصدار المطلوبة، وهو جدول من هياكل ElfN_Verneed. هذا القسم من النوع SHT_GNU_versym. نوع السمة المستخدم هو SHF_ALLOC.
.got
يحتوي هذا القسم على جدول الإزاحة العام. هذا القسم من النوع SHT_PROGBITS. السمات خاصة بالمعالج.
.hash
يحتوي هذا القسم على جدول تلبيد رموز. هذا القسم من النوع SHT_HASH. السمة المستخدمة هي SHF_ALLOC.
.init
يحتوي هذا القسم على تعليمات قابلة للتنفيذ تساهم في كود تهيئة العملية. عندما يبدأ البرنامج في العمل، يقوم النظام بالترتيب لتنفيذ الكود الموجود في هذا القسم قبل استدعاء نقطة إدخال البرنامج الرئيسة. هذا القسم من النوع SHT_PROGBITS. السمات المستخدمة هي SHF_ALLOC و SHF_EXECINSTR.
.interp
يحتوي هذا القسم على مسار مفسر البرنامج. إذا كان الملف يحتوي على قطاع قابل للتحميل يتضمن هذا القسم، فستشمل سمات القسم بت SHF_ALLOC. وخلاف ذلك، سيكون هذا البت معطلاً. هذا القسم من النوع SHT_PROGBITS.
.line
يحتوي هذا القسم على معلومات أرقام السطور للتنقيح الرمزي، والتي تصف التطابق بين مصدر البرنامج وكود الآلة. المحتويات غير محددة. هذا القسم من النوع SHT_PROGBITS. لا تُستخدم أي أنواع سمات.
.note
يحتوي هذا القسم على ملاحظات متنوعة. هذا القسم من النوع SHT_NOTE. لا تُستخدم أي أنواع سمات.
.note.ABI-tag
يُستخدم هذا القسم للإعلان عن واجهة التطبيق الثنائية (ABI) المتوقعة لوقت التشغيل لصورة ELF. قد يتضمن اسم نظام التشغيل وإصدارات وقت التشغيل الخاصة به. هذا القسم من النوع SHT_NOTE. السمة الوحيدة المستخدمة هي SHF_ALLOC.
.note.gnu.build-id
يُستخدم هذا القسم للاحتفاظ بمعرّف يحدد محتويات صورة ELF بشكل فريد. يجب أن تحتوي الملفات المختلفة التي لها نفس معرّف البناء على نفس المحتوى القابل للتنفيذ. انظر خيار --build-id لرابط GNU ‏(ld(1)) لمزيد من التفاصيل. هذا القسم من النوع SHT_NOTE. السمة الوحيدة المستخدمة هي SHF_ALLOC.
.note.GNU-stack
يُستخدم هذا القسم في ملفات كائنات لينكس للإعلان عن سمات المكدس (stack). هذا القسم من النوع SHT_PROGBITS. السمة الوحيدة المستخدمة هي SHF_EXECINSTR. يشير هذا لرابط GNU إلى أن ملف الكائنات يتطلب مكدسًا قابلاً للتنفيذ.
.note.openbsd.ident
تحتوي ملفات OpenBSD التنفيذية الأصلية عادةً على هذا القسم لتعريف نفسها حتى تتمكن النواة من تجاوز أي اختبارات محاكاة لملفات ELF الثنائية للتوافق عند تحميل الملف.
.plt
يحتوي هذا القسم على جدول ربط الإجراءات. هذا القسم من النوع SHT_PROGBITS. السمات خاصة بالمعالج.
.relNAME
يحتوي هذا القسم على معلومات إعادة التوطين كما هو موضح أدناه. إذا كان الملف يحتوي على قطاع قابل للتحميل يتضمن إعادة التوطين، فستشمل سمات القسم بت SHF_ALLOC. وخلاف ذلك، سيكون البت معطلاً. بحسب العرف، يُزود "NAME" من قِبل القسم الذي تنطبق عليه عمليات إعادة التوطين. وبالتالي، فإن قسم إعادة التوطين لـ .text يحمل عادةً الاسم .rel.text. هذا القسم من النوع SHT_REL.
.relaNAME
يحتوي هذا القسم على معلومات إعادة التوطين كما هو موضح أدناه. إذا كان الملف يحتوي على قطاع قابل للتحميل يتضمن إعادة التوطين، فستشمل سمات القسم بت SHF_ALLOC. وخلاف ذلك، سيكون البت معطلاً. بحسب العرف، يُزود "NAME" من قِبل القسم الذي تنطبق عليه عمليات إعادة التوطين. وبالتالي، فإن قسم إعادة التوطين لـ .text يحمل عادةً الاسم .rela.text. هذا القسم من النوع SHT_RELA.
.rodata
يحتوي هذا القسم على بيانات للقراءة فقط تساهم عادةً في قطاع غير قابل للكتابة في صورة العملية. هذا القسم من النوع SHT_PROGBITS. السمة المستخدمة هي SHF_ALLOC.
.rodata1
يحتوي هذا القسم على بيانات للقراءة فقط تساهم عادةً في قطاع غير قابل للكتابة في صورة العملية. هذا القسم من النوع SHT_PROGBITS. السمة المستخدمة هي SHF_ALLOC.
.shstrtab
يحتوي هذا القسم على أسماء الأقسام. هذا القسم من النوع SHT_STRTAB. لا تُستخدم أي أنواع سمات.
.strtab
يحتوي هذا القسم على سلاسل، وهي في الغالب السلاسل التي تمثل الأسماء المرتبطة بمدخلات جدول الرموز. إذا كان الملف يحتوي على قطاع قابل للتحميل يتضمن جدول سلاسل الرموز، فستشمل سمات القسم بت SHF_ALLOC. وخلاف ذلك، سيكون البت معطلاً. هذا القسم من النوع SHT_STRTAB.
.symtab
يحتوي هذا القسم على جدول رموز. إذا كان الملف يحتوي على قطاع قابل للتحميل يتضمن جدول الرموز، فستشمل سمات القسم بت SHF_ALLOC. وخلاف ذلك، سيكون البت معطلاً. هذا القسم من النوع SHT_SYMTAB.
.text
يحتوي هذا القسم على "النص"، أو التعليمات القابلة للتنفيذ للبرنامج. هذا القسم من النوع SHT_PROGBITS. السمات المستخدمة هي SHF_ALLOC و SHF_EXECINSTR.

جداول السلاسل والرموز

تحتوي أقسام جدول السلاسل على تسلسلات محارف منتهية بمحرف صفري، وتسمى عادةً بالسلاسل. يستخدم ملف الكائنات هذه السلاسل لتمثيل أسماء الرموز والأقسام. يُشار إلى السلسلة كمؤشر داخل قسم جدول السلاسل. يُعرَّف البايت الأول، وهو المؤشر صفر، على أنه يحتوي على بايت صفري ('\0'). وبالمثل، يُعرَّف البايت الأخير في جدول السلاسل على أنه يحتوي على بايت صفري، مما يضمن الإنهاء الصفري لجميع السلاسل.

يحتوي جدول رموز ملف الكائنات على المعلومات اللازمة لتحديد موقع وإعادة توطين التعريفات والمراجع الرمزية للبرنامج. مؤشر جدول الرموز هو دليل منخفض في هذه المصفوفة.


typedef struct {

uint32_t st_name;
Elf32_Addr st_value;
uint32_t st_size;
unsigned char st_info;
unsigned char st_other;
uint16_t st_shndx; } Elf32_Sym;


typedef struct {

uint32_t st_name;
unsigned char st_info;
unsigned char st_other;
uint16_t st_shndx;
Elf64_Addr st_value;
uint64_t st_size; } Elf64_Sym;

تحتوي النسختان ذات الـ 32 بت والـ 64 بت على نفس الأعضاء، ولكن بترتيب مختلف فقط.

يحتوي هذا العضو على مؤشر داخل جدول سلاسل رموز ملف الكائنات، والذي يحتوي على تمثيلات محرفية لأسماء الرموز. إذا كانت القيمة غير صِفرية، فإنها تمثل مؤشر جدول السلاسل الذي يعطي اسم الرمز. وخلاف ذلك، لا يكون للرمز اسم.
يعطي هذا العضو قيمة الرمز المرتبط.
العديد من الرموز لها أحجام مرتبطة بها. يحتوي هذا العضو على الصفر إذا لم يكن للرمز حجم أو كان حجمه غير معروف.
يحدد هذا العضو نوع الرمز وسمات الربط الخاصة به:
نوع الرمز غير معرف.
الرمز مرتبط بكائن بيانات.
الرمز مرتبط بدالة أو كود آخر قابل للتنفيذ.
الرمز مرتبط بقسم. توجد مدخلات جدول الرموز من هذا النوع أساسًا لإعادة التوطين، وعادةً ما يكون لها روابط STB_LOCAL.
بحسب العرف، يعطي اسم الرمز اسم ملف المصدر المرتبط بملف الكائنات. رمز الملف له روابط STB_LOCAL، ومؤشر قسمه هو SHN_ABS، ويسبق رموز STB_LOCAL الأخرى للملف، إذا كان موجودًا.
القيم في النطاق الشامل [STT_LOPROC، STT_HIPROC] محجوزة لدلالات خاصة بالمعالج.
الرموز المحلية ليست مرئية خارج ملف الكائنات الذي يحتوي على تعريفها. قد توجد رموز محلية بنفس الاسم في ملفات متعددة دون أن تتداخل مع بعضها البعض.
الرموز العامة مرئية لجميع ملفات الكائنات التي يُجرى دمجها. إن تعريف ملف واحد لرمز عام سيلبي مرجعًا غير معرف لملف آخر إلى نفس الرمز.
الرموز الضعيفة تشبه الرموز العامة، ولكن لتعريفاتها أسبقية أقل.
القيم في النطاق الشامل [STB_LOPROC، STB_HIPROC] محجوزة لدلالات خاصة بالمعالج.
توجد ماكروهات لتعبئة وتفريغ حقول الربط والنوع:
استخراج ربط من قيمة st_info.
استخراج نوع من قيمة st_info.
تحويل ربط ونوع إلى قيمة st_info.
يحدد هذا العضو رؤية الرمز.
STV_DEFAULT
قواعد رؤية الرموز المبدئية. الرموز العامة والضعيفة متاحة للوحدات البرمجية الأخرى؛ والمراجع في الوحدة البرمجية المحلية يمكن اعتراضها بواسطة تعريفات في وحدات برمجية أخرى.
فئة مخفية خاصة بالمعالج.
الرمز غير متاح للوحدات البرمجية الأخرى؛ وتُحل المراجع في الوحدة البرمجية المحلية دائمًا إلى الرمز المحلي (أي لا يمكن اعتراض الرمز بواسطة تعريفات في وحدات برمجية أخرى).
الرمز متاح للوحدات البرمجية الأخرى، ولكن المراجع في الوحدة البرمجية المحلية تُحل دائمًا إلى الرمز المحلي.

توجد ماكروهات لاستخراج نوع الرؤية:

ELF32_ST_VISIBILITY(other) أو ELF64_ST_VISIBILITY(other)

يُعرَّف كل مدخل في جدول الرموز بالنسبة إلى قسم ما. يحتفظ هذا العضو بفهرس جدول ترويسة القسم ذي الصلة.

مداخل إعادة التوطين (Rel و Rela)

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

بنى إعادة التوطين التي لا تحتاج إلى مضاف:


typedef struct {

Elf32_Addr r_offset;
uint32_t r_info; } Elf32_Rel;


typedef struct {

Elf64_Addr r_offset;
uint64_t r_info; } Elf64_Rel;

بنى إعادة التوطين التي تحتاج إلى مضاف:


typedef struct {

Elf32_Addr r_offset;
uint32_t r_info;
int32_t r_addend; } Elf32_Rela;


typedef struct {

Elf64_Addr r_offset;
uint64_t r_info;
int64_t r_addend; } Elf64_Rela;

يحدد هذا العضو الموقع الذي يُطبَّق فيه إجراء إعادة التوطين. بالنسبة للملف القابل لإعادة التوطين، تكون القيمة هي إزاحة البايت من بداية القسم إلى وحدة التخزين المتأثرة بإعادة التوطين. بالنسبة للملف التنفيذي أو الكائن المشترك، تكون القيمة هي العنوان الافتراضي لوحدة التخزين المتأثرة بإعادة التوطين.
يعطي هذا العضو كلاً من فهرس جدول الرموز الذي يجب إجراء إعادة التوطين بالنسبة إليه ونوع إعادة التوطين المراد تطبيقه. أنواع إعادة التوطين مخصصة للمعالج. عندما يشير النص إلى نوع إعادة توطين مدخل ما أو فهرس جدول الرموز الخاص به، فإن ذلك يعني نتيجة تطبيق ELF[32|64]_R_TYPE أو ELF[32|64]_R_SYM، على التوالي، على العضو r_info للمدخل.
يحدد هذا العضو مضافاً ثابتاً يُستخدم لحساب القيمة المراد تخزينها في الحقل القابل لإعادة التوطين.

الوسوم الديناميكية (Dyn)

يحتوي القسم .dynamic على سلسلة من البنى التي تحتفظ بمعلومات الربط الديناميكي ذات الصلة. يتحكم العضو d_tag في تفسير d_un.


typedef struct {

Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un; } Elf32_Dyn; extern Elf32_Dyn _DYNAMIC[];


typedef struct {

Elf64_Sxword d_tag;
union {
Elf64_Xword d_val;
Elf64_Addr d_ptr;
} d_un; } Elf64_Dyn; extern Elf64_Dyn _DYNAMIC[];

يمكن أن يحمل هذا العضو أيًا من القيم التالية:
يميز نهاية القسم الديناميكي
إزاحة جدول السلاسل النصية إلى اسم المكتبة المطلوبة
الحجم بالبايت لمداخل إعادة توطين PLT
عنوان PLT و/أو GOT
عنوان جدول تلبيد الرموز
عنوان جدول السلاسل النصية
عنوان جدول الرموز
عنوان جدول إعادة توطين Rela
الحجم بالبايت لجدول إعادة توطين Rela
الحجم بالبايت لمدخل جدول إعادة توطين Rela
الحجم بالبايت لجدول السلاسل النصية
الحجم بالبايت لمدخل جدول الرموز
عنوان دالة التهيئة
عنوان دالة الإنهاء
إزاحة جدول السلاسل النصية إلى اسم الكائن المشترك
إزاحة جدول السلاسل النصية إلى مسار البحث عن تبعيات المكتبة المباشرة وغير المباشرة
تنبيه الرابط للبحث في هذا الكائن المشترك قبل الملف التنفيذي عن الرموز
عنوان جدول إعادة توطين Rel
الحجم بالبايت لجدول إعادة توطين Rel
الحجم بالبايت لمدخل جدول Rel
نوع مدخل إعادة التوطين الذي يشير إليه PLT‏ (Rela أو Rel)
استخدام غير محدد لتنقيح الأخطاء
يشير غياب هذا المدخل إلى عدم وجوب تطبيق أي مداخل إعادة توطين على مقطع غير قابل للكتابة
عنوان مداخل إعادة التوطين المرتبطة بـ PLT فقط
توجيه الرابط الديناميكي لمعالجة جميع عمليات إعادة التوطين قبل نقل التحكم إلى الملف التنفيذي
إزاحة جدول السلاسل النصية إلى مسار البحث عن تبعيات المكتبة المباشرة
القيم في النطاق الشامل [DT_LOPROC، DT_HIPROC] محجوزة لدلالات مخصصة للمعالج
يمثل هذا العضو قيمًا صحيحة بتفسيرات متنوعة.
يمثل هذا العضو العناوين الافتراضية للبرنامج. عند تفسير هذه العناوين، ينبغي حساب العنوان الفعلي بناءً على قيمة الملف الأصلية وعنوان قاعدة الذاكرة. لا تحتوي الملفات على مداخل إعادة توطين لإصلاح هذه العناوين.
_DYNAMIC
مصفوفة تحتوي على جميع البنى الديناميكية في القسم .dynamic. يُملأ هذا آليًا بواسطة الرابط.

الملاحظات (Nhdr)

تسمح ملاحظات ELF بإلحاق معلومات عشوائية ليستخدمها النظام. تُستخدم بشكل رئيس بواسطة ملفات الذاكرة الأساسية (e_type لـ ET_CORE)، ولكن العديد من المشاريع تعرّف مجموعتها الخاصة من الامتدادات. على سبيل المثال، تستخدم سلسلة أدوات GNU ملاحظات ELF لتمرير المعلومات من الرابط إلى مكتبة C.

تحتوي أقسام الملاحظات على سلسلة من الملاحظات (انظر تعريفات البنية struct أدناه). تتبع كل ملاحظة حقل الاسم (الذي يُعرَّف طوله في n_namesz) ثم حقل الواصف (الذي يُعرَّف طوله في n_descsz) والذي يمتلك عنوان بدئه محاذاة بـ 4 بايت. لا يُعرَّف أي من الحقلين في بنية الملاحظة بسبب أطوالهما العشوائية.

ينبغي لمثال على تحليل ملاحظتين متتاليتين أن يوضح تخطيطهما في الذاكرة:


void *memory, *name, *desc;
Elf64_Nhdr *note, *next_note;
/* The buffer is pointing to the start of the section/segment.  */
note = memory;
/* If the name is defined, it follows the note.  */
name = note->n_namesz == 0 ? NULL : memory + sizeof(*note);
/* If the descriptor is defined, it follows the name

(with alignment). */ desc = note->n_descsz == 0 ? NULL :
memory + sizeof(*note) + ALIGN_UP(note->n_namesz, 4); /* The next note follows both (with alignment). */ next_note = memory + sizeof(*note) +
ALIGN_UP(note->n_namesz, 4) +
ALIGN_UP(note->n_descsz, 4);

ضع في اعتبارك أن تفسير n_type يعتمد على فضاء الأسماء المحدد بواسطة حقل n_namesz. إذا لم يُعيّن حقل n_namesz (على سبيل المثال، كان 0)، فسيكون هناك مجموعتان من الملاحظات: واحدة لملفات الذاكرة الأساسية والأخرى لجميع أنواع ELF الأخرى. إذا كان فضاء الأسماء غير معروف، فستتراجع الأدوات عادةً إلى مجموعات الملاحظات هذه أيضًا.


typedef struct {

Elf32_Word n_namesz;
Elf32_Word n_descsz;
Elf32_Word n_type; } Elf32_Nhdr;


typedef struct {

Elf64_Word n_namesz;
Elf64_Word n_descsz;
Elf64_Word n_type; } Elf64_Nhdr;

طول حقل الاسم بالبايت. ستتبع المحتويات هذه الملاحظة مباشرة في الذاكرة. الاسم منتهٍ بمحرف صفري. على سبيل المثال، إذا كان الاسم "GNU"، فسيُعيّن n_namesz على 4.
طول حقل الواصف بالبايت. ستتبع المحتويات حقل الاسم مباشرة في الذاكرة.
اعتمادًا على قيمة حقل الاسم، قد يحمل هذا العضو أيًا من القيم التالية:
الملاحظات المستخدمة من قبل جميع ملفات الذاكرة الأساسية. هذه مخصصة للغاية لنظام التشغيل أو المعمارية وغالبًا ما تتطلب تنسيقًا وثيقًا مع النوى ومكتبات C والمصححات. تُستخدم هذه عندما يكون فضاء الأسماء هو المبدئي (أي يُعيّن n_namesz على 0)، أو كبديل احتياطي عندما يكون فضاء الأسماء غير معروف.
NT_PRSTATUS
بنية prstatus
بنية fpregset
بنية prpsinfo
بنية prxregset
بنية المهمة task
سلسلة نصية من sysinfo(SI_PLATFORM)
مصفوفة auxv
بنية gwindows
بنية asrset
بنية pstatus
بنية psinfo
بنية prcred
بنية utsname
بنية lwpstatus
بنية lwpinfo
بنية fprxregset
siginfo_t (قد يزداد الحجم بمرور الوقت)
يحتوي على معلومات حول الملفات الممسوحة ذهنيا (المطابقة)
user_fxsr_struct
مسجلات PowerPC Altivec/VMX
مسجلات PowerPC SPE/EVR
مسجلات PowerPC VSX
فتحات i386 TLS (بنية user_desc)
خريطة بتات أذونات x86 io ‏(1=منع)
الحالة الممتدة لـ x86 باستخدام xsave
أنصاف المسجلات العليا لـ s390
مسجل مؤقت s390
مسجل مقارن ساعة وقت اليوم (TOD) لـ s390
مسجل وقت اليوم (TOD) القابل للبرمجة لـ s390
مسجلات تحكم s390
مسجل بادئة s390
عنوان حدث الكسر لـ s390
بيانات إعادة تشغيل استدعاء نظام s390
كتلة تشخيص معاملات s390
مسجلات ARM VFP/NEON
مسجل ARM TLS
مسجلات نقطة التوقف العتادية لـ ARM
مسجلات نقطة المراقبة العتادية لـ ARM
رقم استدعاء نظام ARM
الامتدادات المستخدمة بواسطة سلسلة أدوات GNU.
معلومات ABI لنظام التشغيل (OS). يتكون حقل desc من 4 كلمات:
[0]
واصف نظام التشغيل (ELF_NOTE_OS_LINUX، و ELF_NOTE_OS_GNU، وما إلى ذلك)
[1]
الإصدار الرئيس لـ ABI
[2]
الإصدار الفرعي لـ ABI
[3]
الإصدار الثانوي لـ ABI
معلومات hwcap الاصطناعية. يبدأ حقل desc بكلمتين:
[0]
عدد المداخل
[1]
قناع بتات المداخل الممكنة
ثم تتبعها مداخل متغيرة الطول، بايت واحد يليه سلسلة نصية لاسم hwcap منتهية بمحرف صفري. يعطي البايت رقم البت لاختبار ما إذا كان مُمكّنًا، (1U << bit) & قناع البتات.
معرّف بناء فريد كما يولّده خيار --build-id لمحرّر الروابط GNU ld(1). يتكوّن الوصف (desc) من أي عدد غير صفري من البايتات.
يحتوي الوصف (desc) على إصدار محرر روابط GNU Gold المُستخدَم.
تُستخدَم هذه عندما يكون فضاء الأسماء هو المبدئي (أي، سيُضبَط n_namesz إلى 0)، أو كبديل احتياطي عندما يكون فضاء الأسماء مجهولًا.
NT_VERSION
سلسلة نصية للإصدار من نوع ما.
معلومات المعمارية.

ملاحظات

ظهر تنسيق ELF لأول مرة في System V. وتنسيق ELF هو معيار معتمد.

الامتدادات الخاصة بكل من e_phnum و e_shnum و e_shstrndx على التوالي هي امتدادات لينكس. وتدعمها أيضًا أنظمة Sun و BSD و AMD64؛ لمزيد من المعلومات، انظر قسم انظر أيضًا (SEE ALSO).

انظر أيضًا

as(1), elfedit(1), gdb(1), ld(1), nm(1), objcopy(1), objdump(1), patchelf(1), readelf(1), size(1), strings(1), strip(1), execve(2), dl_iterate_phdr(3), core(5), ld.so(8)

شركة هوليت-باكارد (Hewlett-Packard)، دليل Elf-64 Object File Format.

منظمة سانتا كروز (Santa Cruz Operation)، دليل System V Application Binary Interface.

مختبرات نظام يونكس (UNIX System Laboratories)، قطاع "Object Files"، دليل Executable and Linking Format (ELF).

شركة صن مايكروسيستمز (Sun Microsystems)، دليل Linker and Libraries Guide.

مسودة AMD64 ABI، دليل System V Application Binary Interface AMD64 Architecture Processor Supplement.

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

8 فبراير 2026 صفحات دليل لينكس (لم تصدر بعد)