1. ELF与应用程序:内容与容器的关系
当你在Linux下编写一个简单的C程序并编译:
bash复制gcc hello.c -o hello
生成的hello文件就是一个标准的ELF可执行文件。使用file命令可以验证:
bash复制$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=..., not stripped
1.1 ELF文件的基本结构
ELF文件由四个核心部分组成:
- ELF Header:位于文件开头,包含魔数(0x7F+'ELF')、文件类型(可执行/共享库/目标文件)、机器架构(x86/ARM等)、程序入口地址等信息。通过
readelf -h可以查看:
bash复制$ readelf -h hello
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry poin
