รูปแบบที่ปฏิบัติการได้และเชื่อมโยงได้

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
รูปแบบที่ปฏิบัติการได้และเชื่อมโยงได้
นามสกุลไฟล์
none, .axf , .bin , .elf , .o , .out , .prx , .puff , .ko , .modและ . so
ตัวเลขมหัศจรรย์0x7F 'E' 'L' 'F'
พัฒนาโดยห้องปฏิบัติการระบบ Unix [1] : 3 
ประเภทของรูปแบบไบนารี , เรียกใช้งานได้ , อ็อบเจ็กต์ , ไลบรารี ที่ใช้ร่วมกัน , core dump
คอนเทนเนอร์สำหรับรูปแบบไบนารีที่ปฏิบัติการได้มากมาย
ไฟล์ ELF มีสองมุมมอง: ส่วนหัวของโปรแกรมแสดงส่วนที่ใช้ในขณะทำงาน ในขณะที่ส่วนหัวของส่วนแสดงรายการชุดของส่วน

ใน การ คำนวณรูปแบบ Executable และ Linkable [2] ( ELFเดิมชื่อExtensible Linking Format ) เป็น รูปแบบไฟล์มาตรฐานทั่วไปสำหรับไฟล์ สั่ง การโค้ดอ็อบเจ็กต์ไลบรารีที่ ใช้ร่วมกัน และคอร์ ดัมพ์ เผยแพร่ครั้งแรกในข้อกำหนดสำหรับApplication Binary Interface (ABI) ของ ระบบปฏิบัติการ Unixเวอร์ชันชื่อSystem V Release 4 (SVR4), [3]และต่อมาใน Tool Interface Standard [1]ได้รับการยอมรับอย่างรวดเร็วจากผู้จำหน่ายต่างๆUnixระบบต่างๆ ในปี 2542 โปรเจ็ กต์ 86openได้รับเลือกให้เป็นรูปแบบไฟล์ไบนารีมาตรฐานสำหรับระบบที่คล้าย Unix และ Unixบนโปรเซสเซอร์x86

จากการออกแบบ รูปแบบ ELF มีความยืดหยุ่น ขยายได้ และข้ามแพลตฟอร์ม ตัวอย่างเช่น สนับสนุนendiannessesและขนาดที่อยู่ที่แตกต่างกัน ดังนั้นจึงไม่ยกเว้นหน่วยประมวลผลกลาง (CPU) หรือสถาปัตยกรรมชุดคำสั่งโดยเฉพาะ สิ่งนี้ทำให้สามารถนำไปใช้ ใน ระบบปฏิบัติการต่างๆ มากมายบน แพลตฟอร์มฮาร์ดแวร์ต่างๆ

รูปแบบไฟล์

ไฟล์ ELF แต่ละไฟล์ประกอบด้วยส่วนหัวของ ELF หนึ่งรายการ ตามด้วยข้อมูลไฟล์ ข้อมูลอาจรวมถึง:

  • ตารางส่วนหัวของโปรแกรม ที่อธิบายเซ็กเมนต์หน่วยความจำ ศูนย์หรือมากกว่า
  • ตารางส่วนหัวของส่วน ที่อธิบายส่วนศูนย์หรือมากกว่า
  • ข้อมูลที่อ้างถึงโดยรายการในตารางส่วนหัวของโปรแกรมหรือตารางส่วนหัวของส่วน
โครงสร้างของไฟล์ 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@.....|

ตัวอย่าง hexdump ของส่วนหัวของไฟล์ ELF [4]

ส่วนหัวของไฟล์

ส่วนหัวของ ELF กำหนดว่าจะใช้ที่อยู่ แบบ 32หรือ64 บิต ส่วนหัวประกอบด้วยฟิลด์สามฟิลด์ที่ได้รับผลกระทบจากการตั้งค่านี้ และออฟเซ็ตฟิลด์อื่นๆ ที่ตามมา ส่วนหัวของ ELF มีความยาว 52 หรือ 64 ไบต์สำหรับไบนารี 32 บิตและ 64 บิตตามลำดับ

ส่วนหัวของเอลฟ์[5]
ออฟเซ็ต ขนาด (ไบต์) สนาม วัตถุประสงค์
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หรือ เพื่อแสดง endianness2น้อยหรือใหญ่ตามลำดับ ซึ่งจะส่งผลต่อการตีความฟิลด์แบบหลายไบต์ที่เริ่มต้นด้วยoffset 0x10
0x06 1 e_ident[EI_VERSION] ตั้งค่า1เป็นเวอร์ชันดั้งเดิมและเวอร์ชันปัจจุบันของ ELF
0x07 1 e_ident[EI_OSABI] ระบุระบบปฏิบัติการเป้าหมาย ABI
ค่า อาบี
0x00 ระบบ V
0x01 HP-UX
0x02 NetBSD
0x03 ลินุกซ์
0x04 GNU Hurd
0x06 Solaris
0x07 AIX (มอนเทอเรย์)
0x08 IRIX
0x09 FreeBSD
0x0A Tru64
0x0B โนเวลล์ โมเดสโต
0x0C OpenBSD
0x0D OpenVMS
0x0E เคอร์เนลดุ๊กดิ๊ก
0x0F AROS
0x10 FenixOS
0x11 Nuxi CloudABI
0x12 Stratus Technologies OpenVOS
0x08 1 e_ident[EI_ABIVERSION] ระบุรุ่น ABI เพิ่มเติม การตีความขึ้นอยู่กับเป้าหมาย ABI เคอร์เนลลินุกซ์ (หลังจากอย่างน้อย 2.6) ไม่มีคำจำกัดความ[6]ดังนั้นจึงถูกละเว้นสำหรับไฟล์เรียกทำงานที่ลิงก์แบบสแตติก ในกรณีนั้น ออฟเซ็ตและขนาดของ EI_PAD คือ8.

glibc 2.12+ ในกรณีที่e_ident[EI_OSABI] == 3ถือว่าฟิลด์นี้เป็นเวอร์ชัน ABI ของตัวเชื่อมโยงแบบไดนามิก : [7]กำหนดรายการคุณสมบัติของตัวเชื่อมโยงแบบไดนามิก[8]ถือว่าe_ident[EI_ABIVERSION]เป็นระดับคุณลักษณะที่ร้องขอโดย วัตถุที่ใช้ร่วมกัน (ไลบรารีปฏิบัติการหรือไดนามิก) และปฏิเสธที่จะโหลดหากมีการร้องขอคุณสมบัติที่ไม่รู้จัก เช่นe_ident[EI_ABIVERSION]มากกว่าคุณสมบัติที่รู้จักที่ใหญ่ที่สุด [9]

0x09 7 e_ident[EI_PAD] ไบต์การแพ็ดที่สงวนไว้ ปัจจุบันไม่ได้ใช้ ควรเติมศูนย์และละเว้นเมื่ออ่าน
0x10 2 e_type ระบุประเภทไฟล์อ็อบเจ็กต์
ค่า พิมพ์ ความหมาย
0x00 ET_NONE ไม่ทราบ
0x01 ET_REL ไฟล์ที่ย้ายได้
0x02 ET_EXEC ไฟล์ปฏิบัติการ
0x03 ET_DYN วัตถุที่ใช้ร่วมกัน
0x04 ET_CORE ไฟล์หลัก
0xFE00 ET_LOOS จองช่วงรวม. ระบบปฏิบัติการเฉพาะ
0xFEFF ET_HIOS
0xFF00 ET_LOPROC จองช่วงรวม. เฉพาะโปรเซสเซอร์
0xFFFF ET_HIPROC
0x12 2 e_machine ระบุสถาปัตยกรรมชุดคำสั่งเป้าหมาย ตัวอย่างบางส่วน ได้แก่ :
ค่า คือ
0x00 ไม่มีชุดคำสั่งเฉพาะ
0x01 AT&T WE 32100
0x02 สปาร์ก
0x03 x86
0x04 โมโตโรล่า 68000 (M68k)
0x05 โมโตโรล่า 88000 (M88k)
0x06 Intel MCU
0x07 อินเทล 80860
0x08 MIPS
0x09 ระบบ IBM/370
0x0A MIPS RS3000 Little-endian
0x0B - 0x0D สงวนไว้สำหรับใช้ในอนาคต
0x0E Hewlett-Packard PA-RISC
0x0F สงวนไว้สำหรับใช้ในอนาคต
0x13 อินเทล 80960
0x14 PowerPC
0x15 PowerPC (64 บิต)
0x16 S390รวมถึง S390x
0x17 IBM SPU/SPC
0x18 - 0x23 สงวนไว้สำหรับใช้ในอนาคต
0x24 NEC V800
0x25 ฟูจิตสึ FR20
0x26 TRW RH-32
0x27 Motorola RCE
0x28 ARM (สูงสุด ARMv7/Aarch32)
0x29 ดิจิตอลอัลฟ่า
0x2A SuperH
0x2B SPARC เวอร์ชัน 9
0x2C โปรเซสเซอร์ฝังตัว Siemens TriCore
0x2D โกนอ RISC Core
0x2E ฮิตาชิ H8/300
0x2F ฮิตาชิ H8/300H
0x30 ฮิตาชิ H8S
0x31 ฮิตาชิ H8/500
0x32 IA-64
0x33 สแตนฟอร์ด MIPS-X
0x34 Motorola ColdFire
0x35 โมโตโรล่า M68HC12
0x36 Fujitsu MMA Multimedia Accelerator
0x37 ซีเมนส์ PCP
0x38 โปรเซสเซอร์ RISC แบบฝังตัว nCPU ของ Sony
0x39 ไมโครโปรเซสเซอร์ Denso NDR1
0x3A โปรเซสเซอร์ Motorola Star*Core
0x3B โปรเซสเซอร์ Toyota ME16
0x3C โปรเซสเซอร์ STMicroelectronics ST100
0x3D Advanced Logic Corp. ตระกูลโปรเซสเซอร์แบบฝัง TinyJ
0x3E AMD x86-64
0x8C ตระกูล TMS320C6000
0xAF MCST เอลบรุส e2k
0xB7 ARM 64 บิต (ARMv8/Aarch64)
0xF3 RISC-V
0xF7 ตัวกรองแพ็คเก็ตเบิร์กลีย์
0x101 WDC 65C816
0x14 4 e_version กำหนดให้1เป็นเวอร์ชันดั้งเดิมของ ELF
0x18 4 8 e_entry นี่คือที่อยู่หน่วยความจำของจุดเริ่มต้นซึ่งกระบวนการเริ่มดำเนินการ ฟิลด์นี้มีความยาว 32 หรือ 64 บิต ขึ้นอยู่กับรูปแบบที่กำหนดไว้ก่อนหน้านี้ (ไบต์ 0x04) หากไฟล์ไม่มีจุดเริ่มต้นที่เกี่ยวข้อง ค่านี้จะถือเป็นศูนย์
0x1C 0x20 4 8 e_phoff ชี้ไปที่จุดเริ่มต้นของตารางส่วนหัวของโปรแกรม โดยปกติแล้วจะเป็นไปตามส่วนหัวของไฟล์ทันทีต่อจากนี้ ทำให้ออฟเซ็ต0x34หรือ0x40สำหรับไฟล์ปฏิบัติการ ELF แบบ 32 และ 64 บิต ตามลำดับ
0x20 0x28 4 8 e_shoff ชี้ไปที่จุดเริ่มต้นของตารางส่วนหัวของส่วน
0x24 0x30 4 e_flags การตีความฟิลด์นี้ขึ้นอยู่กับสถาปัตยกรรมเป้าหมาย
0x28 0x34 2 e_ehsize ประกอบด้วยขนาดของส่วนหัวนี้ ปกติ 64 ไบต์สำหรับ 64 บิตและ 52 ไบต์สำหรับรูปแบบ 32 บิต
0x2A 0x36 2 e_phentsize ประกอบด้วยขนาดของรายการตารางส่วนหัวของโปรแกรม
0x2C 0x38 2 e_phnum ประกอบด้วยจำนวนรายการในตารางส่วนหัวของโปรแกรม
0x2E 0x3A 2 e_shentsize ประกอบด้วยขนาดของรายการตารางส่วนหัวของส่วน
0x30 0x3C 2 e_shnum ประกอบด้วยจำนวนรายการในตารางส่วนหัวของส่วน
0x32 0x3E 2 e_shstrndx ประกอบด้วยดัชนีของรายการตารางส่วนหัวของส่วนที่มีชื่อส่วน
0x34 0x40 จบเฮดเดอร์ ELF (ขนาด)

ส่วนหัวของโปรแกรม

ตารางส่วนหัวของโปรแกรมจะบอกระบบถึงวิธีการสร้างภาพกระบวนการ พบได้ที่ไฟล์ offset e_phoffและประกอบด้วย รายการ e_phnumโดยแต่ละรายการมีขนาดe_phentsize เลย์เอาต์แตกต่างกันเล็กน้อยใน ELF รุ่น 32 บิตกับ ELF รุ่น 64 บิตเนื่องจากp_flagsอยู่ในตำแหน่งโครงสร้างที่ต่างกันสำหรับเหตุผลการจัดตำแหน่ง แต่ละรายการมีโครงสร้างดังนี้:

ส่วนหัวของโปรแกรม[10]
ออฟเซ็ต ขนาด (ไบต์) สนาม วัตถุประสงค์
32 บิต 64-บิต 32 บิต 64-บิต
0x00 4 p_type ระบุประเภทของเซ็กเมนต์
ค่า ชื่อ ความหมาย
0x00000000 PT_NULL ไม่ได้ใช้รายการตารางส่วนหัวของโปรแกรม
0x00000001 PT_LOAD ส่วนที่สามารถโหลดได้
0x00000002 PT_DYNAMIC ข้อมูลการเชื่อมโยงแบบไดนามิก
0x00000003 PT_INTERP ข้อมูลล่าม
0x00000004 PT_NOTE ข้อมูลเสริม
0x00000005 PT_SHLIB ที่สงวนไว้.
0x00000006 PT_PHDR เซ็กเมนต์ที่มีตารางส่วนหัวของโปรแกรมเอง
0x00000007 PT_TLS เทมเพลต Thread-Local Storage
0x60000000 PT_LOOS จองช่วงรวม. ระบบปฏิบัติการเฉพาะ
0x6FFFFFFFF PT_HIOS
0x70000000 PT_LOPROC จองช่วงรวม. เฉพาะโปรเซสเซอร์
0x7FFFFFFFF PT_HIPROC
0x04 4 p_flags แฟล็กที่ขึ้นกับเซ็กเมนต์ (ตำแหน่งสำหรับโครงสร้าง 64 บิต)
0x04 0x08 4 8 p_offset ออฟเซ็ตของเซ็กเมนต์ในภาพไฟล์
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 บิต)
0x1C 0x30 4 8 p_align 0และ1ระบุว่าไม่มีการจัดตำแหน่ง มิฉะนั้นควรเป็นพลังบวกที่เป็นจำนวนเต็มเท่ากับ 2 โดยp_vaddrเท่ากับp_offsetโมดูลัp_align
0x20 0x38 สิ้นสุดส่วนหัวของโปรแกรม (ขนาด)

หัวเรื่อง

ออฟเซ็ต ขนาด (ไบต์) สนาม วัตถุประสงค์
32 บิต 64-บิต 32 บิต 64-บิต
0x00 4 sh_name ออฟเซ็ตเป็นสตริงใน ส่วน .shstrtabที่แสดงชื่อของส่วนนี้
0x04 4 sh_type ระบุชนิดของส่วนหัวนี้
ค่า ชื่อ ความหมาย
0x0 SHT_NULL ไม่ได้ใช้รายการตารางส่วนหัวของส่วน
0x1 SHT_PROGBITS ข้อมูลโปรแกรม
0x2 SHT_SYMTAB ตารางสัญลักษณ์
0x3 SHT_STRTAB ตารางสตริง
0x4 SHT_RELA รายการย้ายที่มีส่วนเสริม
0x5 SHT_HASH ตารางแฮชสัญลักษณ์
0x6 SHT_DYNAMIC ข้อมูลการเชื่อมโยงแบบไดนามิก
0x7 SHT_NOTE หมายเหตุ
0x8 SHT_NOBITS พื้นที่โปรแกรมที่ไม่มีข้อมูล (bss)
0x9 SHT_REL รายการย้ายถิ่นฐาน ไม่มีส่วนเพิ่มเติม
0x0A SHT_SHLIB ที่สงวนไว้
0x0B SHT_DYNSYM ตารางสัญลักษณ์ตัวเชื่อมโยงแบบไดนามิก
0x0E SHT_INIT_ARRAY อาร์เรย์ของตัวสร้าง
0x0F SHT_FINI_ARRAY อาร์เรย์ของผู้ทำลายล้าง
0x10 SHT_PREINIT_ARRAY อาร์เรย์ของตัวสร้างล่วงหน้า
0x11 SHT_GROUP กลุ่มมาตรา
0x12 SHT_SYMTAB_SHNDX ดัชนีส่วนเสริม
0x13 SHT_NUM จำนวนประเภทที่กำหนด
0x60000000 SHT_LOOS เริ่มเฉพาะระบบปฏิบัติการ
... ... ...
0x08 4 8 sh_flags ระบุคุณสมบัติของส่วน
ค่า ชื่อ ความหมาย
0x1 SHF_WRITE เขียนได้
0x2 SHF_ALLOC ใช้หน่วยความจำระหว่างการดำเนินการ
0x4 SHF_EXECINSTR ปฏิบัติการได้
0x10 SHF_MERGE อาจถูกรวมเข้าด้วยกัน
0x20 SHF_STRINGS ประกอบด้วยสตริงที่สิ้นสุดด้วยค่า null
0x40 SHF_INFO_LINK 'sh_info' มีดัชนี SHT
0x80 SHF_LINK_ORDER รักษาคำสั่งซื้อหลังจากผสมเสร็จ
0x100 SHF_OS_NONCONFORMING จำเป็นต้องมีการจัดการเฉพาะระบบปฏิบัติการที่ไม่ได้มาตรฐาน
0x200 SHF_GROUP ส่วนเป็นสมาชิกของกลุ่ม
0x400 SHF_TLS ส่วนถือ thread-local data
0x0FF00000 SHF_MASKOS ระบบปฏิบัติการเฉพาะ
0xF00000000 SHF_MASKPROC เฉพาะโปรเซสเซอร์
0x4000000 SHF_ORDERED ข้อกำหนดในการสั่งซื้อพิเศษ (Solaris)
0x8000000 SHF_EXCLUDE ไม่รวมส่วนเว้นแต่มีการอ้างอิงหรือจัดสรร (Solaris)
0x0C 0x10 4 8 sh_addr ที่อยู่เสมือนของส่วนในหน่วยความจำ สำหรับส่วนที่โหลด
0x10 0x18 4 8 sh_offset ออฟเซ็ตของส่วนในรูปไฟล์
0x14 0x20 4 8 sh_size ขนาดเป็นไบต์ของส่วนในภาพไฟล์ อาจเป็น 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เป็นยูทิลิตีไบนารี Unix ที่แสดงข้อมูลเกี่ยวกับไฟล์ ELF หนึ่งไฟล์ขึ้นไป GNU Binutilsให้บริการซอฟต์แวร์ฟรี
  • elfutilsจัดเตรียมเครื่องมือทางเลือกให้กับGNU Binutilsสำหรับ Linux เท่านั้น (11)
  • elfdumpเป็นคำสั่งสำหรับดูข้อมูล ELF ในไฟล์ ELF ซึ่งอยู่ภายใต้ Solaris และFreeBSD
  • objdumpให้ข้อมูลที่หลากหลายเกี่ยวกับไฟล์ ELF และรูปแบบอ็อบเจ็กต์อื่นๆ objdumpใช้ไลบรารี Binary File Descriptorเป็นแบ็คเอนด์เพื่อจัดโครงสร้างข้อมูล ELF
  • ยูทิลิตี Unix fileสามารถแสดงข้อมูลบางอย่างเกี่ยวกับไฟล์ ELF รวมถึงสถาปัตยกรรมชุดคำสั่งที่โค้ดในไฟล์อ็อบเจ็กต์ที่เคลื่อนย้ายได้ เรียกใช้งานได้ หรือที่ใช้ร่วมกัน หรือที่ซึ่งสร้างดัมพ์หลักของ ELF

แอปพลิเคชัน

ระบบคล้ายยูนิกซ์

รูปแบบ ELF ได้แทนที่รูปแบบปฏิบัติการที่เก่ากว่าในสภาพแวดล้อมต่างๆ ได้แทนที่ รูปแบบ a.outและCOFFในระบบปฏิบัติการที่เหมือน Unix :

การนำไปใช้ที่ไม่ใช่ Unix

ELF ยังเห็นการยอมรับในระบบปฏิบัติการที่ไม่ใช่ Unix เช่น:

Microsoft Windowsยังใช้รูปแบบ ELF แต่สำหรับระบบย่อยของ Windows สำหรับระบบความเข้ากันได้ของ Linux เท่านั้น [17]

เครื่องเล่นเกม

เครื่องเล่นเกมบางเครื่องยังใช้ ELF:

พาวเวอร์พีซี

ระบบปฏิบัติการ (ระบบปฏิบัติการ) อื่นๆ ที่ทำงานบนPowerPCที่ใช้ ELF:

  • AmigaOS 4ซึ่งเป็นโปรแกรมปฏิบัติการของ ELF ได้เข้ามาแทนที่Extended Hunk Format (EHF) ก่อนหน้านี้ซึ่งใช้กับ Amigas ที่ติดตั้งการ์ดเอ็กซ์แพนชันโปรเซสเซอร์ PPC
  • MorphOS
  • AROS

โทรศัพท์มือถือ

ระบบปฏิบัติการบางระบบสำหรับโทรศัพท์มือถือและอุปกรณ์พกพาใช้ ELF:

โทรศัพท์บางรุ่นสามารถเรียกใช้ไฟล์ ELF ได้โดยใช้โปรแกรมแก้ไขที่เพิ่มรหัสแอสเซมบลี ให้กับ เฟิร์มแวร์หลักซึ่งเป็นคุณสมบัติที่เรียกว่าELFPack ใน วัฒนธรรม การ ดัดแปลงใต้ดิน รูปแบบไฟล์ ELF ยังใช้กับAtmel AVR (8 บิต), AVR32 [21] และสถาปัตยกรรมไมโครคอนโทรลเลอร์Texas Instruments MSP430 การใช้งานOpen Firmware บางตัว ยังสามารถโหลดไฟล์ ELF ได้ โดยเฉพาะอย่างยิ่ง การใช้งานของ Appleที่ใช้ใน เครื่อง PowerPC เกือบทั้งหมด ที่บริษัทผลิต

ข้อมูลจำเพาะ

Linux Standard Base (LSB) เสริม ข้อกำหนดบางประการข้างต้นสำหรับสถาปัตยกรรมที่ระบุไว้ [22]ตัวอย่างเช่น นั่นคือกรณีสำหรับ System V ABI, AMD64 Supplement [23] [24]

86open

86openเป็นโครงการเพื่อสร้างฉันทามติเกี่ยวกับ รูปแบบ ไฟล์ไบนารี ทั่วไป สำหรับ ระบบ ปฏิบัติการที่คล้ายUnixและUnixบน สถาปัตยกรรม x86 ที่ เข้ากันได้กับพีซี ทั่วไป เพื่อสนับสนุนให้นักพัฒนาซอฟต์แวร์พอร์ตไปยังสถาปัตยกรรม [25]แนวคิดเริ่มต้นคือการสร้างมาตรฐานบนเซ็ตย่อยเล็กๆ ของ Spec 1170 ซึ่งเป็นบรรพบุรุษของSingle UNIX Specificationและ GNU C Library (glibc) เพื่อเปิดใช้งานไบนารีที่ไม่ได้แก้ไขเพื่อทำงานบนระบบปฏิบัติการที่เหมือน Unix x86 เดิมโครงการนี้ถูกกำหนดให้เป็น "Spec 150"

ในที่สุดรูปแบบที่เลือกคือ ELF โดยเฉพาะการนำ ELF ไปใช้กับ Linux หลังจากที่กลายเป็นมาตรฐานโดยพฤตินัย ที่ ได้รับการสนับสนุนจากผู้ขายและระบบปฏิบัติการที่เกี่ยวข้องทั้งหมด

กลุ่มนี้เริ่มการสนทนาทางอีเมลในปี 1997 และพบกันครั้งแรกที่ สำนักงาน ปฏิบัติการซานตาครูซเมื่อวันที่ 22 สิงหาคม 1997

คณะกรรมการดำเนินการคือMarc Ewing , Dion Johnson, Evan Leibovitch, Bruce Perens , Andrew Roach, Bryan Wayne SparksและLinus Torvalds คนอื่นๆ ในโครงการ ได้แก่Keith Bostic , Chuck Cranor, Michael Davidson, Chris G. Demetriou, Ulrich Drepper, Don Dugger, Steve Ginzburg, Jon "maddog" Hall , Ron Holt, Jordan Hubbard , Dave Jensen, Kean Johnston, Andrew Josey, Robert Lipe, Bela Lubkin, Tim Marsland, Greg Page, Ronald Joe Record, Tim Ruckle, Joel Silverstein, Chia-pi Tien และ Erik Troan ระบบปฏิบัติการและบริษัทที่เป็นตัวแทน ได้แก่BeOS , BSDI , FreeBSD , Intel, Linux , NetBSD , SCOและSunSoft _

โครงการก้าวหน้าไปและในกลางปี ​​1998 SCO ได้เริ่มพัฒนาlxrun ซึ่งเป็น เลเยอร์ความเข้ากันได้แบบโอเพ่นซอร์สที่สามารถรันไบนารีของ Linux บนOpenServer , UnixWareและSolaris SCO ประกาศการสนับสนุนอย่างเป็นทางการของ lxrun ที่LinuxWorldในเดือนมีนาคม 2542 Sun Microsystemsเริ่มสนับสนุน lxrun สำหรับ Solaris อย่างเป็นทางการในต้นปี 2542 [26]และต่อมาได้ย้ายการสนับสนุนแบบบูรณาการของรูปแบบไบนารี Linux ผ่านSolaris Containers for Linux Applications

ด้วย BSDs ที่รองรับไบนารี Linux เป็นเวลานาน (ผ่านเลเยอร์ที่เข้ากันได้ ) และผู้จำหน่าย x86 Unix หลักได้เพิ่มการรองรับสำหรับรูปแบบ โปรเจ็กต์จึงตัดสินใจว่า Linux ELF เป็นรูปแบบที่เลือกโดยอุตสาหกรรมและ "ประกาศ[d] ตัวมันเองละลาย" บน 25 ก.ค. 2542 [27]

FatELF: ไบนารีสากลสำหรับ Linux

FatELF เป็นส่วนขยายรูปแบบไบนารีของ ELF ที่เพิ่มความสามารถไบนารีไขมัน [28]มีไว้สำหรับLinuxและ ระบบ ปฏิบัติการที่คล้าย Unix อื่น ๆ นอกเหนือจากสถาปัตยกรรมที่เป็นนามธรรมของ CPU ( ลำดับไบต์ขนาดคำชุดคำสั่ง CPU ฯลฯ ) ยังมีข้อได้เปรียบที่เป็นไปได้ของการแยกแพลตฟอร์มซอฟต์แวร์ เช่น ไบนารีที่รองรับเคอร์เนลABI หลาย เวอร์ชัน ณ วันที่ 2 มีนาคม พ.ศ. 2564 FatELF ยังไม่ได้รวมเข้ากับเคอร์เนล mainline Linux [29] [30] [31]

ดูเพิ่มเติม

อ้างอิง

  1. ^ a b Tool Interface Standard (มอก.) Executable and Linking Format (ELF) Specification Version 1.2 (พฤษภาคม 1995)
  2. ^ Tool Interface Standard (มอก.) Portable Formats Specificationsรุ่น 1.1 (ตุลาคม 2536)
  3. ^ System V Application Binary Interface Edition 4.1 (1997-03-18)
  4. ^ "พจนานุกรมที่มีจำหน่าย — Pygments" . pygments.org .
  5. ^ "หัวเอลฟ์" . สกอ.คอม กรกฎาคม 2000 . สืบค้นเมื่อ2014-02-07 .
  6. ^ "LXR linux/include/linux/elf.h" . linux.no _ สืบค้นเมื่อ27 เมษายน 2558 .
  7. ^ "glibc 2.12 ประกาศ" .
  8. ^ "sourceware.org Git - glibc.git/blob - libc-abis "
  9. ^ "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h "
  10. ^ "ส่วนหัวของโปรแกรม" . สกอ.คอม กรกฎาคม 2000 . สืบค้นเมื่อ2017-04-05 .
  11. ^ "เอลฟูติลส์" . sourceware.org . สืบค้นเมื่อ30 เมษายน 2017 .
  12. ^ "รูปแบบไบนารี" .
  13. ^ "MinixReleases – Minix Wiki" . Wiki.minix3.org เก็บถาวรจากต้นฉบับเมื่อ 2013-03-30 . ดึงข้อมูลเมื่อ2014-01-19 .
  14. ^ "สำเนาที่เก็บถาวร" (PDF) . เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2020-09-15 . สืบค้นเมื่อ2016-10-19 . {{cite web}}: CS1 maint: สำเนาที่เก็บถาวรเป็นชื่อ ( ลิงก์ )
  15. ^ "GCCSDK – RISC OS" . Riscos.info 2012-04-22 . ดึงข้อมูลเมื่อ2014-01-19 .
  16. ^ "คู่มือโปรแกรมเมอร์ผู้พิทักษ์" (PDF) . ฮิวเล็ต แพคการ์ด เอ็นเตอร์ไพรส์ เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2018-05-30 . สืบค้นเมื่อ2018-05-30 . หน้า 44 เก็บถาวรจากต้นฉบับ เก็บถาวร 2018-05-30 ที่Wayback Machineเมื่อวันที่ 2018-5-30
  17. โฟลีย์, แมรี่ โจ. "ภายใต้ประทุนของระบบย่อย Windows ของ Microsoft สำหรับ Linux | ZDNet" . ซีดีเน็ต. สืบค้นเมื่อ2016-08-19 .
  18. ^ PlayStation Portable ใช้ ELF ที่เข้ารหัสและย้ายตำแหน่ง: PSP
  19. ^ รูปแบบไฟล์ปฏิบัติการ Symbian OS
  20. ^ โรเซน เคนเนธ; เจ้าภาพ ดักลาส; คลี, ราเชล; โรซินสกี้, ริชาร์ด (2007). UNIX: ข้อมูลอ้างอิงฉบับสมบูรณ์ (2 ฉบับ) แมคกรอว์ ฮิลล์ โปรเฟสชั่นแนล หน้า 707. ISBN  9780071706988. สืบค้นเมื่อ2017-06-08 . ไลบรารีที่เชื่อมโยงแบบไดนามิกเรียกอีกอย่างว่าอ็อบเจ็กต์ที่ใช้ร่วมกัน (.so)
  21. ^ "บทที่ 4: ไฟล์อ็อบเจ็กต์" , System V Application Binary Interface , 2009-10-26, e_machine
  22. ^ "ข้อมูลจำเพาะอ้างอิง LSB " linuxfoundation.org . สืบค้นเมื่อ27 เมษายน 2558 .
  23. ^ "รูปแบบการดำเนินการและการเชื่อมโยง (ELF)" . linuxfoundation.org . สืบค้นเมื่อ27 เมษายน 2558 .
  24. ^ "แนะนำตัว" . linuxfoundation.org . สืบค้นเมื่อ27 เมษายน 2558 .
  25. ↑ ลีโบวิช, อีวาน ( 1997-12-23 ). "86เปิดคำถามที่พบบ่อย " เก็บถาวรจากต้นฉบับเมื่อ 2007-03-11 สืบค้นเมื่อ2007-06-06 .
  26. ^ บันทึกโรนัลด์ (1998-05-21) "ประกาศสถานะ 86open ที่ SCO" . เก็บถาวรจากต้นฉบับเมื่อ 2008-12-08 . สืบค้นเมื่อ2008-05-06 .
  27. ↑ ลีโบวิช, อีวาน ( 1999-07-25 ). "โครงการ The86open – อัปเดตครั้งสุดท้าย" . เก็บถาวรจากต้นฉบับเมื่อ 2007-02-27 สืบค้นเมื่อ2007-05-06 .
  28. กอร์ดอน, ไรอัน. "การกำหนดชะตา กรรมv1" icculus.org . สืบค้นเมื่อ2010-07-25 .
  29. กอร์ดอน, ไรอัน. "FatELF: ปรากฏว่าชอบความไม่แน่นอนมากกว่า " icculus.org . สืบค้นเมื่อ2010-07-13 .
  30. ^ ฮอลเวอร์ดา ธม (2009-11-03). "ไรอัน กอร์ดอน ยุติโครงการ FatELF" . osnews.com . สืบค้นเมื่อ2010-07-05 .
  31. บร็อคไมเออร์, โจ (23 มิถุนายน 2010). "ตนเอง: กายวิภาคของความล้มเหลว (ที่ถูกกล่าวหา)" . ข่าวรายสัปดาห์ของลินุกซ์ สืบค้นเมื่อ2011-02-06 .

อ่านเพิ่มเติม

ลิงค์ภายนอก