ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ELF文件格式

ELF文件格式

Day 18: ELF文件格式

本章介绍Linux可执行文件的ELF(Executable and Linkable Format)格式结构。


1. ELF结构

ELF文件结构: ELF Header | +-- Program Headers (段表) | - LOAD segment | - DYNAMIC segment | - ... | +-- Section Headers (节表) | - .text | - .data | - .symtab | - ... | +-- 数据内容

2. ELF Header

typedefstruct{unsignedchare_ident[16];// 魔数 "\x7fELF"Elf64_Half e_type;// 类型Elf64_Half e_machine;// 架构Elf64_Word e_version;Elf64_Addr e_entry;// 入口地址Elf64_Off e_phoff;// 程序头偏移Elf64_Off e_shoff;// 节头偏移Elf64_Word e_flags;Elf64_Half e_ehsize;// ELF头大小Elf64_Half e_phentsize;Elf64_Half e_phnum;// 程序头数量Elf64_Half e_shentsize;Elf64_Half e_shnum;// 节头数量Elf64_Half e_shstrndx;}Elf64_Ehdr;

3. 常用命令

# 查看ELF信息readelf -h program# ELF头readelf -l program# 程序头readelf -S program# 节头readelf -s program# 符号表readelf -d program# 动态段# objdumpobjdump -d program# 反汇编objdump -x program# 所有头信息

4. 段与节

段(Segment):加载视图 - 告诉加载器如何映射到内存 节(Section):链接视图 - 告诉链接器各部分用途 常见节: .text - 代码 .data - 已初始化数据 .bss - 未初始化数据 .rodata - 只读数据 .symtab - 符号表 .strtab - 字符串表 .rel.text - 重定位信息 .dynamic - 动态链接信息 .got - 全局偏移表 .plt - 过程链接表

5. 动态链接

.plt (Procedure Linkage Table) .got (Global Offset Table) 首次调用流程: 1. call printf@plt 2. PLT跳转到GOT 3. GOT初始为解析器地址 4. 解析器找到真实地址 5. 更新GOT 6. 后续直接跳转

6. 小结

[ELF结构] 1. ELF Header 2. Program Headers (段) 3. Section Headers (节) [关键节] 4. .text代码 5. .plt/.got动态链接 [工具] 6. readelf 7. objdump

下一篇预告:Day 19 - ARM汇编基础


返回列表