ndk工具
readelf、nm 和 objdump 的作用与区别
1. readelf
- 作用
用于解析和显示 ELF 格式文件(如可执行文件、动态库、core dump)的详细结构信息,包括:- ELF Header(文件类型、入口地址、节头表偏移等)。
- Program Headers(内存段类型、权限、文件偏移等)。
- Section Headers(节名称、类型、大小等)。
- 符号表(
.symtab)、重定位表(.rel.*)等调试信息。
- 示例命令
1
2
3readelf -a a.out # 显示所有信息
readelf -S a.out # 仅显示节头表
readelf -l a.out # 仅显示程序头表 - 优点
- 输出信息全面,适合分析 ELF 文件的底层结构。
- 支持直接解析二进制文件,无需依赖其他工具。
- 缺点
- 作用
显示 ELF 文件中的符号表信息,包括:- 符号名称、地址、类型(如函数、全局变量、未初始化变量等)。
- 符号的可见性(如全局符号
T、本地符号t)。
- 示例命令
1
2nm a.out # 显示所有符号
nm -D /lib64/ld-linux-x86-64.so.2 # 显示动态库符号 - 优点
- 快速定位符号地址和类型,适合调试符号冲突或未定义引用问题。
- 输出简洁,适合脚本化处理。
- 缺点
- 作用
提供更全面的 ELF 文件分析功能,包括:- 反汇编代码段(
.text节)。 - 显示节头表、程序头表、动态段(
.dynamic)等。 - 解析重定位信息(
.rel.*节)。
- 反汇编代码段(
- 示例命令
1
2
3objdump -d a.out # 反汇编代码段
objdump -x a.out # 显示所有头信息和节内容
objdump -R a.out # 显示动态重定位信息 - 优点
- 支持反汇编,适合分析代码逻辑或机器指令。
- 输出格式灵活,可结合
-S选项混合显示汇编和源码(需调试信息)。
- 缺点
- 分析 ELF 文件结构 → 使用
readelf。 - 调试符号问题 → 使用
nm。 - 反汇编或动态链接分析 → 使用
objdump。 - 综合调试 → 结合三者(如
readelf查看结构,nm定位符号,objdump反汇编)。