실행 파일 및 링크 형식
Executable and Linkable Format파일 이름 확장자 | none, .axf, .bin, .elf, .o, .out, .prx, .timeout, .ko, .mod 및 .so |
---|---|
매직 넘버 | 0x7F 'E' 'L' 'F' |
개발자 | UNIX 시스템 연구소[1]: 3 |
포맷의 종류 | 바이너리, 실행 파일, 오브젝트, 공유 라이브러리, 코어 덤프 |
컨테이너: | 많은 실행 가능한 바이너리 형식 |
컴퓨팅에서 실행 파일 및 연결 형식[2](ELF, 이전 이름 확장 가능 링크 형식)은 실행 파일, 개체 코드, 공유 라이브러리 및 코어 덤프의 일반적인 표준 파일 형식입니다.System V Release 4(SVR4)[3]라는 이름의 Unix 운영체제버전의 Application Binary Interface(ABI; 응용 프로그램 바이너리 인터페이스) 사양에 처음 공개되었으며, 이후 Tool Interface [1]Standard에 공개되어 Unix 시스템의 여러 벤더 사이에서 빠르게 받아들여졌습니다.1999년 86오픈 프로젝트에 의해 x86 프로세서의 Unix 및 Unix 유사 시스템의 표준 바이너리 파일 포맷으로 선택되었습니다.
설계상 ELF 형식은 유연하고 확장 가능하며 크로스 플랫폼입니다.예를 들어 다양한 엔디안니스와 주소 크기를 지원하므로 특정 중앙 처리 장치(CPU)나 명령 집합 아키텍처를 배제하지 않습니다.이를 통해 다양한 하드웨어 플랫폼의 다양한 운영 체제에서 채택할 수 있게 되었습니다.
파일 레이아웃
각 ELF 파일은 1개의 ELF 헤더로 구성되며 그 다음에 파일 데이터가 이어집니다.데이터에는 다음이 포함됩니다.
- 0개 이상의 메모리 세그먼트를 설명하는 프로그램 헤더 테이블
- 섹션 헤더 테이블: 0개 이상의 섹션을 설명합니다.
- 프로그램 헤더 테이블 또는 섹션 헤더 테이블의 엔트리에 의해 참조되는 데이터
세그먼트에는 파일의 런타임 실행에 필요한 정보가 포함되어 있으며 섹션에는 링크 및 재배치에 필요한 중요한 데이터가 포함되어 있습니다.파일 전체의 바이트는 최대 1개의 섹션이 소유할 수 있으며, 임의의 섹션이 소유하지 않는 고립된 바이트가 발생할 수 있습니다.
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@.....
Example hexdump of ELF file header[4]
파일 헤더
ELF 헤더는 32비트주소를 사용할지 64비트주소를 사용할지를 정의합니다.헤더에는 이 설정의 영향을 받는 3개의 필드가 포함되어 있으며, 그 뒤에 오는 다른 필드는 오프셋됩니다.ELF 헤더는 32비트 바이너리와 64비트 바이너리의 경우 각각 52바이트 또는 64바이트입니다.
오프셋 | 크기(바이트) | 들판 | 목적 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32비트 | 64비트 | 32비트 | 64비트 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | e_ident[특정]EI_MAG0] ~e_ident[EI_MAG3] | 0x7F 이어서ELF (45 4c 46 )를 ASCII로 지정합니다.이 4바이트는 매직넘버를 구성합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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의 원래 버전 및 현재 버전의 ELF에 대해 설명합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x07 | 1 | e_ident[특정]EI_OSABI] | 타겟 운영체제 ABI를 식별합니다.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 1 | e_ident[특정]EI_ABVIRSION] | 또, ABI 버전을 지정합니다.이 해석은 대상 ABI에 따라 달라집니다.Linux 커널(최소 2.6 이후)에는 [6]정의되어 있지 않기 때문에 정적으로 연결된 실행 파일에서는 무시됩니다.이 경우 EI_PAD의 오프셋과 사이즈는 다음과 같습니다.8 .e_ident[의 경우 glibc 2.12+EI_OSABI] == 3은 이 필드를 다이내믹링커의 [7]ABI 버전으로 취급합니다.다이나믹 링커의 [8]기능 목록을 정의하고 e_ident를 처리합니다.EI_ABIRSION]은 공유 객체(실행 가능 또는 동적 라이브러리)에 의해 요구되며 알 수 없는 기능이 요구될 경우 로드를 거부합니다(예: e_ident[).EI_ABIRSION]은 기존 기능 [9]중 가장 큰 크기입니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x09 | 7 | e_ident[특정]EI_PAD] | 예약된 패딩 바이트.현재 미사용.0으로 채워야 하며 읽을 때 무시해야 합니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 2 | e_type | 오브젝트 파일유형을 식별합니다.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x12 | 2 | e_머신 | 대상 명령 집합 아키텍처를 지정합니다.예를 들어 다음과 같습니다.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 4 | e_version | 로 설정1 ELF의 원래 버전입니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 4 | 8 | e_엔트리 | 프로세스 실행을 시작하는 진입점의 메모리 주소입니다.이 필드의 길이는 앞서 정의한 형식(바이트 0x04)에 따라 32비트 또는 64비트입니다.파일에 연결된 진입점이 없는 경우 0이 유지됩니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x20 | 4 | 8 | e_phoff | 프로그램 헤더 테이블의 시작을 가리킵니다.보통 이 파일 머리글 바로 뒤에 오므로 오프셋을 만듭니다.0x34 또는0x40 각각 32비트 및 64비트 ELF 실행 파일의 경우. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x28 | 4 | 8 | e_shopf | 섹션 헤더 테이블의 시작을 가리킵니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x30 | 4 | e_module | 이 필드의 해석은 대상 아키텍처에 따라 달라집니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x34 | 2 | e_ehsize | 이 헤더의 크기를 포함합니다.일반적으로 64비트의 경우 64바이트, 32비트 형식의 경우 52바이트입니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2A | 0x36 | 2 | e_phentsize | 프로그램 헤더 테이블엔트리의 크기를 포함합니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x38 | 2 | e_phnum | 프로그램 헤더 테이블의 엔트리 수를 포함합니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2E | 0x3A | 2 | e_sysize | 섹션 헤더 테이블엔트리의 크기를 포함합니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x30 | 0x3C | 2 | e_shnum | 섹션 헤더 테이블의 엔트리 수가 포함됩니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x32 | 0x3E | 2 | e_shstrndx | 섹션 이름을 포함하는 섹션 헤더 테이블 항목의 인덱스를 포함합니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x34 | 0x40 | ELF 헤더의 끝(사이즈). |
프로그램 헤더
프로그램 헤더 테이블은 프로세스 이미지 작성 방법을 시스템에 알려줍니다.이것은 파일 오프셋e_phoff 에 있으며, e_phnum 엔트리로 구성되어 있으며 각각 크기가 e_phentsize 입니다.레이아웃은 32비트 ELF와 64비트 ELF에서는 약간 다릅니다.이는 p_flag가 정렬상의 이유로 다른 구조 위치에 있기 때문입니다.각 엔트리는 다음과 같이 구성됩니다.
오프셋 | 크기(바이트) | 들판 | 목적 | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32비트 | 64비트 | 32비트 | 64비트 | |||||||||||||||||||||||||||||||||||||||
0x00 | 4 | p_type | 세그먼트의 유형을 식별합니다.
| |||||||||||||||||||||||||||||||||||||||
0x04 | 4 | p_models(p_models) | 세그먼트 의존 플래그(64비트 구조의 위치). | |||||||||||||||||||||||||||||||||||||||
0x04 | 0x08 | 4 | 8 | p_models(p_models) | 파일 이미지에서 세그먼트의 오프셋입니다. | |||||||||||||||||||||||||||||||||||||
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_models(p_models) | 세그먼트 의존 플래그(32비트 구조의 위치). | |||||||||||||||||||||||||||||||||||||||
0x1C | 0x30 | 4 | 8 | p_align | 0 그리고.1 정렬을 지정하지 않습니다.그렇지 않으면 p_vaddr은 p_offset 계수 p_align과 같은 양의 정수 2가 됩니다. | |||||||||||||||||||||||||||||||||||||
0x20 | 0x38 | 프로그램 헤더 끝(크기). |
섹션 헤더
오프셋 | 크기(바이트) | 들판 | 목적 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32비트 | 64비트 | 32비트 | 64비트 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | sh_name | 이 섹션의 이름을 나타내는 .shstrtab 섹션의 문자열 오프셋. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 4 | sh_type | 이 헤더의 유형을 식별합니다.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 4 | 8 | sh_displays(시리얼) | 섹션의 Atribute를 식별합니다.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0C | 0x10 | 4 | 8 | sh_addr | 로드된 섹션의 메모리 내 섹션 가상 주소. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 0x18 | 4 | 8 | sh_displays(시리얼) | 파일 이미지 내의 섹션 오프셋. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 0x20 | 4 | 8 | sh_ | 파일 이미지 섹션의 크기(바이트 단위).0일 수 있습니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 0x28 | 4 | sh_link | 연관된 섹션의 섹션 인덱스를 포함합니다.이 필드는 섹션 유형에 따라 여러 목적으로 사용됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x2C | 4 | sh_info | 섹션에 대한 추가 정보가 포함되어 있습니다.이 필드는 섹션 유형에 따라 여러 목적으로 사용됩니다. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x30 | 4 | 8 | sh_addralign | 섹션의 필수 정렬이 포함되어 있습니다.이 필드는 2의 거듭제곱이어야 합니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x38 | 4 | 8 | 사이즈 | 고정 크기 엔트리를 포함하는 섹션의 각 엔트리의 크기(바이트 단위)가 포함됩니다.그렇지 않으면 이 필드에 0이 포함됩니다. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x40 | 섹션 헤더 끝(크기). |
도구들
readelf
는 1개 이상의 ELF 파일에 대한 정보를 표시하는 Unix 바이너리 유틸리티입니다.무료 소프트웨어 구현은 GNU Binutils에 의해 제공됩니다.elfutils
는 순전히 [11]Linux용 GNU Binutils 대체 도구를 제공합니다.elfdump
는 ELF 파일의 ELF 정보를 표시하기 위한 명령어로 Solaris 및 FreeB에서 사용할 수 있습니다.SD.objdump
에 ELF 파일 및 기타 오브젝트 형식에 대한 광범위한 정보를 나타냅니다.objdump
는 ELF 데이터를 구조화하기 위한 백엔드로 바이너리 파일 기술자 라이브러리를 사용합니다.- 유닉스
file
유틸리티는 재배치 가능, 실행 가능 또는 공유 개체 파일의 코드가 의도된 명령 집합 아키텍처 또는 ELF 코어 덤프가 생성된 명령 집합 아키텍처를 포함하여 ELF 파일에 대한 일부 정보를 표시할 수 있습니다.
적용들
Unix 계열 시스템
![]() | 이 기사는 목록 형식이지만 산문으로 읽는 것이 더 나을 것이다.(2016년 11월) |
다양한 환경에서 ELF 형식이 이전 실행 파일 형식을 대체했습니다.Unix 계열 운영 체제의 a.out 및 COFF 형식을 대체했습니다.
- 리눅스
- Solaris / Illumos
- IRIX
- FreeBSD[12]
- 넷BSD
- 오픈BSD
- 레독스
- DragonFly BSD
- 음절
- HP-UX(SOM을 계속 사용하는32비트 PA-RISC 프로그램 제외)
- 중성미자
- 미닉스[13]
유니크하지 않은 채용
또한 ELF는 다음과 같은 Unix 이외의 운영 체제에서도 채택되고 있습니다.
- OpenVMS, Itanium 및 amd64 버전[14]
- x86 기반 컴퓨터용 BeOS 버전 4 이후 (Portable Executable 포맷을 대체하고 PowerPC 버전은 Preferred Executable 포맷으로 유지)
- BeOS의 오픈 소스 재실장 하이쿠
- RISC OS[15]
- Stratus VOS, PA-RISC 및 x86 버전
- 스카이 OS
- Fuchsia OS
- Z/TPF
- HPE 논스톱 OS[16]
- 데오스
Microsoft Windows 에서는, ELF 형식도 사용합니다만, Windows Subsystem for Linux 호환성 시스템 [17]전용입니다.
게임 콘솔
일부 게임 콘솔은 ELF를 사용합니다.
- PlayStation Portable,[18] PlayStation Vita, PlayStation (콘솔), PlayStation 2, PlayStation 3, PlayStation 4, PlayStation 5
- GP2X
- 드림캐스트
- 게임큐브
- 닌텐도 64
- Wii
- Wii U
Power PC
전원으로 동작하는 기타 (운영 체제)시스템ELF를 사용하는 PC:
휴대 전화
휴대 전화 및 모바일 장치의 일부 운영 체제시스템은 ELF를 사용합니다.
- Symbian OS v9는 ELF 파일 포맷에 기반한E32Image[19] 포맷을 사용합니다.
- 예를 들어 Sony Ericson은 W800i, W610, W300 등입니다.
- Siemens, SGOLD 및 SGOLD2 플랫폼: Siemens C65에서 S75 및 BenQ-Siemens E71/EL71.
- 예를 들어, Motorola는 E398, SLVR L7, v360, v3i(및 패치가 적용된 모든 전화 LTE2)입니다.
- 바다, 예를 들어 Samsung Wave S8500.
- 예를 들어 Nokia N900과 같은 Maemo 또는 Meego OS를 실행하는 Nokia 전화기 또는 태블릿.
- Android는 Java Native Interface에 ELF .so(공유[20] 개체) 라이브러리를 사용합니다.Android 5.0 "Lollipop" 이후 기본인 Android Runtime(ART)을 사용하면 설치 시 모든 응용 프로그램이 네이티브 ELF 바이너리로 컴파일됩니다.
일부 전화기는 메인 펌웨어에 어셈블리코드를 추가하는 패치를 사용하여 ELF 파일을 실행할 수 있습니다.이 기능은 언더그라운드모딩 문화에서는 ELFPack이라고 불립니다.ELF 파일 형식은 Atmel AVR(8비트), AVR32[21] 및 Texas Instruments MSP430 마이크로컨트롤러 아키텍처에서도 사용됩니다.Open Firmware의 일부 구현에서는 ELF 파일도 로드할 수 있습니다.특히 애플은 이 회사가 생산한 거의 모든 PowerPC 머신에 사용되고 있습니다.
사양
- 범용:
- System V Application Binary Interface Edition 4.1(1997-03-18)
- System V ABI 업데이트(2009년 10월)
- AMD64:
- ARM:
- IA-32:
- IA-64:
- Itanium 소프트웨어 컨벤션 및 런타임 가이드 (2000년 9월)
- M32R:
- MIPS:
- System V ABI, MIPS RISC 프로세서 보충판
- MIPS EABI 문서(2003-06-11)
- Motorola 6800:
- PA-RISC:
- PowerPC:
- System V ABI, PPC 보충
- PowerPC 임베디드 애플리케이션 바이너리 인터페이스 32비트 구현 (1995-10-01)
- 64비트 PowerPC ELF 애플리케이션 바이너리 인터페이스 보충 버전 1.9 (2004)
- SPARC:
- S/390:
- z 시리즈:
- Symbian OS 9:
Linux Standard Base(LSB; 리눅스 표준 기반)는 [22]지정된 아키텍처에 대해 위의 사양 중 일부를 보완합니다.예를 들어 System V ABI, AMD64 [23][24]Supplement가 해당됩니다.
86 열림
86open은 공통 PC 호환 x86 아키텍처에서 Unix 및 Unix와 유사한 운영체제를 위한 공통 바이너리 파일 형식에 대한 합의를 도출하여 소프트웨어 개발자들이 아키텍처에 [25]포팅하도록 장려하는 프로젝트입니다.당초의 아이디어는, 싱글 UNIX 사양의 전신인 사양 1170과 GNU C 라이브러리(glibc)의 작은 서브셋으로 표준화해, 수정되지 않은 바이너리를 x86 Unix 계열의 operating system에서 실행할 수 있도록 하는 것이었습니다.이 프로젝트는 원래 "스펙 150"으로 지정되었습니다.
최종적으로 선택된 형식은 ELF, 특히 Linux의 ELF 구현으로, 모든 관련 벤더와 운영체제에 의해 지원되는 사실상의 표준으로 판명되었습니다.
이 그룹은 1997년 이메일 논의를 시작했으며 1997년 8월 22일 산타크루즈 운영 사무실에서 처음 만났다.
운영 위원회는 마크 유잉, 디온 존슨, 에반 라이보비치, 브루스 페렌스, 앤드류 로치, 브라이언 웨인 스파크스, 라이너스 토발즈였다.이 프로젝트에 참여한 다른 사람들은 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, Roe, Ron, Ron Ronald.대표 운영체제 및 기업은 BeOS, BSDI, FreeBSD, 인텔, Linux, NetBSD, SCO 및 SunSoft였습니다.
프로젝트가 진행되어 1998년 중반 SCO는 OpenServer, UnixWare 및 Solaris에서 Linux 바이너리를 실행할 수 있는 오픈 소스 호환성 레이어인 lxrun을 개발하기 시작했습니다.SCO는 1999년 3월에 Linux World에서 lxrun을 공식적으로 지원한다고 발표했습니다.Sun Microsystems는 1999년 [26]초에 Solaris용 lxrun을 공식적으로 지원하기 시작했으며 이후 Solaris Containers for Linux Applications를 통해 Linux 바이너리 포맷을 통합 지원하게 되었습니다.
BSD는 (호환 레이어를 통해) Linux 바이너리를 오랫동안 지원했으며 주요 x86 Unix 벤더가 포맷을 추가로 지원함에 따라 이 프로젝트는 1999년 [27]7월 25일 Linux ELF를 업계에서 선택한 포맷으로 결정하고 "해산 선언"을 했습니다.
FatELF: Linux용 유니버설 바이너리
FatELF는 Fat 이진 [28]기능을 추가하는 ELF 이진 형식 확장입니다.Linux 및 기타 Unix 계열 운영체제용입니다.CPU 아키텍처 추상화(바이트 순서, 워드 크기, CPU 명령 세트 등) 외에도 여러 커널 ABI 버전을 지원하는 바이너리 소프트웨어 플랫폼 추상화의 잠재적인 이점이 있습니다.2021년 현재[update] FatELF는 메인라인 Linux [29][30][31]커널에 통합되어 있지 않습니다.
「 」를 참조해 주세요.
- 응용 프로그램 바이너리 인터페이스
- 실행 파일 형식 비교
- DWARF – 데이터 디버깅 형식
- 인텔 바이너리 호환성 표준
- 휴대용 실행 파일– Windows에서 사용되는 형식
- vDSO – 가상 DSO
- 위치 독립 코드
레퍼런스
- ^ a b TIS(Tool Interface Standard) 실행 파일 및 링크 포맷(ELF) 사양 버전 1.2(1995년 5월)
- ^ 도구 인터페이스 표준(TIS) 휴대용 형식 사양 버전 1.1(1993년 10월)
- ^ System V Application Binary Interface Edition 4.1(1997-03-18)
- ^ "Available lexers — Pygments". pygments.org.
- ^ "ELF Header". Sco.com. July 2000. Retrieved 2014-02-07.
- ^ "LXR linux/include/linux/elf.h". linux.no. Retrieved 27 April 2015.
- ^ "glibc 2.12 announce".
- ^ "sourceware.org Git - glibc.git/blob - libc-abis".
- ^ "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h".
- ^ "Program Header". Sco.com. July 2000. Retrieved 2017-04-05.
- ^ "elfutils". sourceware.org. Retrieved 30 April 2017.
- ^ "Binary Formats".
- ^ "MinixReleases – Minix Wiki". Wiki.minix3.org. Archived from the original on 2013-03-30. Retrieved 2014-01-19.
- ^ "Archived copy" (PDF). Archived from the original (PDF) on 2020-09-15. Retrieved 2016-10-19.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ "GCCSDK – RISC OS". Riscos.info. 2012-04-22. Retrieved 2014-01-19.
- ^ "Guardian Programmer's Guide" (PDF). Hewlett Packard Enterprise. Archived from the original (PDF) on 2018-05-30. Retrieved 2018-05-30. 2018-5-30 웨이백 머신에서 원래 아카이브된 2018-05-30에서 보관된 페이지 44
- ^ Foley, Mary Jo. "Under the hood of Microsoft's Windows Subsystem for Linux ZDNet". ZDNet. Retrieved 2016-08-19.
- ^ PlayStation Portable은 암호화 및 재배치된 ELF 사용: PSP
- ^ Symbian OS 실행 파일 형식
- ^ Rosen, Kenneth; Host, Douglas; Klee, Rachel; Rosinski, Richard (2007). UNIX: The Complete Reference (2 ed.). McGraw Hill Professional. p. 707. ISBN 9780071706988. Retrieved 2017-06-08.
Dynamically linked libraries are also called shared objects (.so).
- ^ "Chapter 4: Object Files", System V Application Binary Interface, 2009-10-26, e_machine
- ^ "LSB Referenced Specifications". linuxfoundation.org. Retrieved 27 April 2015.
- ^ "Executable and Linking Format (ELF)". linuxfoundation.org. Retrieved 27 April 2015.
- ^ "Introduction". linuxfoundation.org. Retrieved 27 April 2015.
- ^ Leibovitch, Evan (1997-12-23). "86Open Frequently-Asked Questions". Archived from the original on 2007-03-11. Retrieved 2007-06-06.
- ^ Record, Ronald (1998-05-21). "Bulletin on status of 86open at SCO". Archived from the original on 2008-12-08. Retrieved 2008-05-06.
- ^ Leibovitch, Evan (1999-07-25). "The86open Project – Final Update". Archived from the original on 2007-02-27. Retrieved 2007-05-06.
- ^ Gordon, Ryan. "fatelf-specification v1". icculus.org. Retrieved 2010-07-25.
- ^ Gordon, Ryan. "FatELF: Turns out I liked the uncertainty better". icculus.org. Retrieved 2010-07-13.
- ^ Holwerda, Thom (2009-11-03). "Ryan Gordon Halts FatELF Project". osnews.com. Retrieved 2010-07-05.
- ^ Brockmeier, Joe (June 23, 2010). "SELF: Anatomy of an (alleged) failure". Linux Weekly News. Retrieved 2011-02-06.
추가 정보
- Levine, John R. (2000) [October 1999]. Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, USA: Morgan Kaufmann. ISBN 1-55860-496-0. OCLC 42413382. Archived from the original on 2012-12-05. Retrieved 2020-01-12. 코드: [1][2] 에라타: [3]
- Drepper, Ulrich (2006-08-20). "How To Write Shared Libraries" (PDF). 4.0. Retrieved 2007-06-20.
{{cite journal}}
:Cite 저널 요구 사항journal=
(도움말) - 노래 없는 영웅: 2007년 2월 24일 원본에서 아카이브된 Peter Seebach의 열심히 일하는 ELF, 2005년 12월 20일
- LibEf 및 GELF - 웨이백 머신에서 ELf 파일을 조작하는 라이브러리(2004년 2월 25일 아카이브)
- ELF 오브젝트 파일 형식: 개요, Eric Youngdale(1995-05-01)의 섹션별 ELF 객체 파일 형식
- Brian Raiter의 Linux용 정말 10대 ELF 실행 파일 작성에 관한 Whirlind 튜토리얼
- Julien Vanegue(2003-08-13)에 의한 이동 불가능한 객체로의 ELF 재배치
- ELFsh 팀에 의한 ptrace 없는 임베디드 ELF 디버깅(2005-08-01)
- Pat Beirne에 의한 ELF 부하 및 리록 연구(1999-08-03)
외부 링크
- FreeBSD 핸드북: 이진 형식(아카이브 버전)
- FreeBSD elf(5) 매뉴얼페이지
- NetBSD ELF FAQ
- Linux elf(5) 매뉴얼페이지
- Oracle Solaris 링커 및 라이브러리 가이드
- ERESI 프로젝트 : 2021-03-14 Wayback Machine 아카이브된 ELF 기반 운영체제 역설계
- Linux Today 기사(86) 1999년 7월 26일
- Debian Announce 메일링 리스트 86 open 발표 1997년 10월 10일 Bruce Perens
- SCO 그룹에서의 Ulrich Drepper 선언 (PDF) vs IBM, 2006년 9월 19일
- 86 오픈 및 ELF 토론, Groklaw의 Wayback Machine에서 2019-02-01 아카이브, 2006년 8월 13일