赞
踩
参考:交叉编译工具链介绍_五里之南的博客-CSDN博客_交叉编译链是什么
GNU Binutils:
一般在解压后的交叉编译工具链bin
目录下会有很多可执行程序工具
ld :GNU链接器。
as :GNU汇编器。
addr2line:将地址转换为文件名和行号。
ar:用于创建,修改和提取档案的实用程序。创建静态库
nm:列出目标文件中的符号。
objcopy:复制并转换目标文件。格式转换,比如把一个图片转成.o文件
objdump:显示目标文件中的信息。
readelf:显示来自任何ELF格式对象文件的信息。
size:列出的对象或归档文件的部分的尺寸。
strings:列出文件中的可打印字符串。
strip:丢弃的符号。
1、nm显示的地址是真实地址吗?
nm -s : 指为初始化的全局数据
nm -C -n : 由于是C++源文件,故添加-C 选项,为了方便查看,添加-n选项
B或b :未被初始化的全局数据,放在.bss段
为什么gdb显示的函数地址和nm不一样?_绛洞花主敏明的博客-CSDN博客
怎么查看二进制文件内容?linux下nm命令告诉你! - 牧野星辰 - 博客园
不是,可能需要加偏移才能使真实地址
0000000000000000 B g_uninit
0000000000000000 D str
0000000000000000 T func1()
令人疑惑的是,为什么他们的地址都是0,难道说mcu的0地址同时可以存三种数据?其实不是这样的,按照上面的符号表规则,g_uninit属于.bss段,str属于全局数据区,而func1()属于代码段,这个地址其实是相对于不同数据区的起始地址,即g_uninit在.bss段中的地址是0,以此类推,而.bss段具体被映射到哪一段地址,这属于平台相关,并不能完全确定。
2、objdump
$objdump -d main.o: 反汇编程序
$objdump -t main.o : 显示符号表入
3、readelf
ELF文件有三种类型:
可重定位的对象文件(Relocatable file) .o文件
可执行的对象文件(Executable file)
可被共享的对象文件(Shared object file)
-h –file-header 文件头 Display the ELF file header
-S –section-headers 段头 Display the sections’ header
-s –syms 符号表 Display the symbol table
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。