缩写:
ABI (Application Binary Interface) 应用程序二进制接口
TIS (Tool Interface Standards) 工具接口标准
TIS 委员会:一个微型计算机工业联合组织,致力于为32位操作系统下的开发工具提供标准化的软件接口。包括:目标标志格式、可执行文件格式、调试信息格式。委员会成员来自 Absoft、Autodesk、Borland、IBM、Intel,etc。
1. 文件格式
可执行程序 也是一个文件。类似于txt,markdown等文件。不同格式文件为不同目的存在。txt文件目的服务于人阅读所以存储成可以阅读的ASCII、UTF-8,内容的bit 0、1 符合 ASCII、UTF-8的编码规范存储。同理markdown 要符合md格式规范。可执行程序文件的阅读对象是操作系统。不同操作系统平台对自己阅读的可执行程序有不同的规范要求。下表为操作系统对应的可执行程序文件格式:
linux : ELF (Executable and LinkingFormat)
Mac (MacOS / iOS) :mach-O (mach-object)
Windows : PE (Portable Executable)
本文关注 linux OS ELF 格式的了解。
2. ELF 历史、标准 及 工具
最初由 Unix 系统实验室 作为 应用程序二进制接口的一部分制定发布。之后 ELF文件格式规范 由TIS委员会制定。
英文 标准原文:/elf/elf.pdf
工具:作用 (下面内容,本人大部分位置,接下来只展开部分,需要详细,请告知,另拿出来分析讨论)
strings : 输出 ELF 中所有字符串
strip : 删除ELF 中无用信息
nm : 列举ELF 目标文件 符号
size : 显示 目标文件段(section)大小,以及目标文件大小
readelf : 显示ELF 文件的内容
objdump : 显示目标文件信息,可用于反汇编
ar : 建立 start library
addr2line : 将地址转换成文件、行号
接下来基于 readelf 工具对 ELF 文件 展开分析。
3. ELF文件内容解析
3.1 readelf视角
3.1.1 readelf 历史
GNU development tools 集合成员。License:"GNU Free Documentation License"
其他 GNU 开源代码路径:/gnu/
readelf 包含在GNU的binutils工具包中:/gnu/binutils
3.1.2 ELF 文件内容
ELF 文件 包含 3个 Header:
ELF Header:介绍 ELF的版本,大小端、Executable\Linking 等 其他概要信息
Section Headers : 各个段信息,包括 段的大小,起始地址
Program Headers : 应用程序加载到操作系统,供操作系统阅读。
一个 Section group: (未知,待学习)
多个Section:Section Headers 中提到的成员的展开。
4. 举例解析
4.1 可执行程序
1) main.c 源文件
2) main 可执行程序(程序运行时,cpu读取的文件),下图通过hexdump 读取, 截图了部分
3) 通过 readelf 读取 main,截图部分内容
4.2 动态lib库
4.3 源文件编译后的没有连接的二进制文件
reference:
1. /papers/Archive/refs/elf/Understanding_ELF.pdf
2. /elf/elf.pdf
3. / linux 各种基础资料的获取地址
4. /lcxhjg/article/details/80938350 工具分析的博客
5. /
6./elf/index.html elf 历史介绍
如果觉得《可执行文件(ELF文件)解析》对你有帮助,请点赞、收藏,并留下你的观点哦!