






















readelf 是 Linux 下一个强有力的工具,专门用于分析 ELF(Executable and Linkable Format)格式的文件,如可执行程序、目标文件(.o)和共享库(.so)。它独立于 BFD 库,因此能提供比 objdump 更具体的信息。
假设目标文件为 myprogram:
readelf -a myprogram:显示全部信息(包含文件头、段头、符号表、重定位信息、动态信息等)。readelf -h myprogram:查看 ELF 文件头(ELF Header)。包括文件类型、机器架构、入口地址等。readelf -S myprogram:查看节头表(Section Headers)。显示程序由哪些部分组成(如 .text 代码段、.data 数据段、.bss)。readelf -l myprogram:查看段头表(Program Headers/Segments)。显示程序在运行时如何映射到内存中(主要针对可执行文件)。readelf -s myprogram:查看符号表(Symbol Table)。列出变量、函数等符号。readelf -d myprogram:查看动态段(Dynamic Section)。主要用于动态链接库分析,查看所依赖的共享库(NEEDED)。readelf -r myprogram:显示重定位信息(Relocations)。 查看一个共享库或可执行文件需要哪些 .so 文件:
readelf -d /bin/ls | grep NEEDED
查看符号表,查找特定函数 main 的位置:
readelf -s myprogram | grep main
readelf -h myprogram | grep Machine
查看数据段(如索引为 15 的 .rodata)的 16 进制内容:
readelf -x 15 myprogram
# 或使用节名称
readelf -x .rodata myprogram
readelf 默认在 80 列换行。对于 64 位 ELF 文件,添加 -W (wide) 参数能在一行中完整显示段信息,更具可读性。 [6, 8]
readelf -SW myprogram
| 选项 | 对应长选项 | 描述 |
|---|---|---|
readelf -h core。readelf -d 检查 NEEDED 字段。readelf -s 查看导出的符号列表。readelf -S 分析 .text 或 .rodata 的地址和大小。注意:readelf 需要的 ELF 文件可以是可执行文件、.o 目标文件、.so 共享库,甚至 ar 命令打包的 .a 静态库。
参考资料:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。