二进制工具集简析 ar 对静态库

本文详细介绍了嵌入式开发中常用的二进制工具,包括addr2line用于地址转文件名和行号,nm用于列出目标文件符号,readelf展示可执行文件头信息,ar管理静态库,以及objdump、objcopy、size、strip和strings等工具的使用方法和功能。这些工具对于理解程序内部结构和调试至关重要。
摘要由CSDN通过智能技术生成

二进制工具集简析

作者:苗老师,华清远见嵌入式学院讲师。

1、addr2line能够把程序地址转换为文件名和行号,前提是这个可执行文件包括调试符号

1 #include <stdio.h>
                  2
                  3 void foo()
                  4 {
                  5     printf("The address of foo() is %p\n",foo);
                  6 }
                  7 int main()
                  8 {
                  9     foo();
                  10     return 0;
                11 }

运行如下命令,得到:

现在,我们可以用这一地址来看看addr2line是如何使用的。在终端中运行如下命令,从命令的运行结果可以看出,addr2line工具正确指出了0x80483c4所对应的程序的具体位置以及所对应的函数名。在调用 addr2line 工具时,要使用 -e 选项来指定可执行映像是 test。通过使用 -f 选项,可以告诉工具输出函数名。

2、nm可以列出目标文件中的符号。用法虽然简单,但是功能很强大。符号是指函数名或变量。

nm所列出的每一行有三部分组成:第一列是指程序运行时的符号所对应的地址,对于函数则地址表示的是函数的开始地址,对于变量则表示变量的存储地址;第二列是指对应符号放在哪一个段;而最后一列则是指符号的名称。在前面我们讲解addr2line时,我们提到addr2line是将程序地址转换成这一地址所对应的具体函数是什么,而nm则是全面的列出这些信息。但是,nm不具备列出符号所在源文件及其行号这一功能,因此,我们说每一个工具有其特定功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值