GCC 工具链部分工具

toc

addr2line

将代码地址转换为对应程序行号                常用于分析和定位内存访问错误问题
  • 使用方法
  1. 开启core dump选项
    ulimit -c unlimited
  2. 运行程序,并生成崩溃时的core文件
    执行导致程序崩溃的测试用例
  3. 读取core文件,获取IP寄存器的值(0x08048000)
    dmesg core
    在输出内容的最后一行内寻找ip寄存器值
  4. 使用addr2line定位代码行
    addr2line 0x08048000 -f -e test.out
    可执行程序必须携带有调试信息

strip

剔除可执行程序中的调试信息

先用调试版程序调试,发布时通过strip去掉调试信息,不用重新编译

ar

将目标文件打包为静态库
  • 打包 ar crs libname.a x.o y.o
  • 解压 ar x libname.a

nm

列出目标文件中的符号(变量名、函数名)及对应地址

输出结果由三部分组成(地址、段、标识符)

    08048430(地址)    T(标识符所在代码段)    func(标识符名)
  • 段说明
说明
A 地址值在链接过程中不会发生改变
B或b 标识符位于未初始化数据段(.bss)
C 未定义存储段的标识符,链接时决定段位置
D或d 标识符位于数据段(.data)
N 调试专用标识符
R或r 标识符位于只读存储区(.rdata)
T或t 标识符位于代码段(.text)
U 未定义的标识符

objdump

查看程序段信息及反汇编
  • objdump -d func.o 输出目标文件对应的汇编代码
  • objdump -S func.o 输出源代码和反汇编指令对照格式
  • objdump -h func.o 查看目标文件中的详细段信息

objdump -h输出说明

字段 说明
Idx 段下标
Name 段标识符(名字)
Size 段所占空间大小
VMA 段起始位置的虚存地址
LMA 段所在存储空间中的加载地址
File off 段在目标文件中的相对位置
Algn 段的边界对齐字节数
size 查看目标文件中段大小
strings 查看目标文件中的字符串




posted @ 2021-10-25 23:35  無雙  阅读(44)  评论(0编辑  收藏  举报