
objdump

在linux下有关obj目标文件的分析
Linux下obj分析
objdump
基础用法
==-h==查看对象文件的所有sections的头部摘要信息
==-f==显示目标文件的整体头部摘要信息
==-t==查看目标文件符号表
==-d==对目标文件进行反汇编(只对包含指令的sections进行反汇编)
==-D==对目标文件进行反汇编
==-j==显式指定sections信息
常用符号表字段
- ==.text==:已编译程序的机器代码
- ==.rodata==:只读数据
- ==.data==:已初始化的全局变量
- ==.bss==:未初始化的全局变量,目标文件格式区分初始化和未初始化变量只是为了空间效率,在目标文件中,未初始化变量不需要占用任何实际的磁盘空间
- ==.symtab==:符号表,存放程序中被定义和引用的函数和全局变量的信息
- ==.rel.txt==:当链接器把目标文件和其他文件结合时,==.text==段中的许多内容都需要修改
- ==.rel.data==:被模块定义或引用的任何全局变量的信息,一般而言任何已初始化的全局变量或者外部定义函数的地址都需要被修改
- ==.debug==:调试符号表,以==-g==选项编译程序时才会有
- ==.line==:原始程序的行号和==.text==段中机器指令之间的映射,以==-g==选项编译程序时才会有
- ==.strtab==:字符串表,其内容包括==.symtab==和==.debug==段中的符号表,以及段头部中的段名字
ar
创建静态链接库
1 | ar -rc libxxx.a xxx.o yyy.o ... |
nm
==nm==命令用于列出目标文件的symbols
对于列出的每一个symbol,nm会显示如下信息
- ==symbol value== 以指定基数来显示symbol的值,默认是十六进制
- ==symbol type==
- ==symbol name==
1 | nm -As libxxx.a |