addr2line

addr2line是用来将程序地址转换成其所对应的程序源文件、代码行以及所对应的函数。

ar

ar是用来管理档案文件的,在嵌入式系统开发中,ar主要是用来对静态库进行管理。

ar常用的几个参数总结:

c 创建一个档案文件

r 向档案文件中增加文件

t 显示档案文件中存在哪些文件

s 用于指示生成索引以加快查找速度

d 从档案文件中删除文件

x 从档案文件中解压文件

nm

nm用于列出程序文件中的符号,符号是指函数或变量名等。

nm所列出的每一行有三部分组成:

第一列,是指程序运行时的符号所对应的地址。对于函数则地址表示的是函数的开始地址;对于变量则表示的是变量的存储地址。

第二列,是指相应符号是放在哪一个段的。

第三列,是指符号的名称。

对nm列出的第二列信息,非常的有用,其意义在于可以了解我们在程序中所定义的一个符号(比如变量)是被放在程序的哪一个段的(.text、.data还是.bss)。第二列信息部分字母的含义如下(其他字母含义可以man nm查看):

A     表示符号所对应的值是绝对的,并且在以后的连接过程中也不会改变。

B或b 表示符号位于未初始化的数据段(.bss)中。

C      表示没有被初始化的公共符号

D或d 表示符号位于初始化的数据段(.data)中。

N      表示符号是调试用的。

p      表示符号位于一个栈回朔段内。

R或r  表示符号位于只读数据段(.rdata)中。

T或t  表示符号位于代码段(.text)中。

U      表示符号没有被定义。

注,同一个字母的小写,表示该符号有static修饰。

objdump

objdump可以用来查看目标程序中的段信息和调试信息,也可以用来对目标程序进行反汇编,还有其他一些功能,具体参考如下。

使用objdump的-h选项查看目标程序的段信息和调试信息(如果有调试信息的话——编译时加了-g选项)。

objdump -h输出的段信息主要包括如下所示几列内容:

Size:每一个段的大小。

VMA:Virtual Memory Address,虚拟内存地址,表示该段在程序运行时的起始地址。

LMA:Load Memory Address,加载内存地址,表示加载程序时该段存放的起始地址。

注,在大多数情况下,VMA和LMA是一样的。由于绝大多数的嵌入式系统都不使用虚拟内存(即不使用MMU),所以VMA的地址就是系统的实地址。

File off:指示的是每一个段在代码文件中的存储位置。对于boot loader来说,就是要通过File off信息从文件中读出相应段的内容,然后将内容写到VMA所对应的地址块上。

Align:指示了每一个段的对齐字节数是多少。

使用objdump的-d选项可以显示程序文件的汇编代码。

在使用-d选项进行反汇编时,还有一个非常有用的选项是-S,其用途是告诉objdump在反汇编时同时显示C/C++源程序和与之对应的汇编代码。

使用objdump的-f选项可以显示目标文件的头信息。

其中最要注意的是start address,其指示了这一程序被执行时的入口地址是什么。对于嵌入式系统,当boot loader加载完程序后,就会调转到start address运行被加载的程序。

另一个非常有用的选项是-s,将它与-j选项配合使用能查看某一个段中的具体内容。

例如,要查看test的.data段:objdump –s –j .data test

objcopy

objcopy的功能非常的强大,它可以对最后生成的程序文件进行一定的编辑。

可以通过-j选项来指定哪一个段是我们需要抽取的。如果有多个段需要抽取,则使用多个-j选项即可。

与-j参数相反的是,采用-R可以删除一个段

在嵌入式系统中,资源往往是有限的,有时为了减少程序文件所占的空间(比如flash),我们可以将程序中的调试信息去除,最为常用的是采用strip工具达到这一目的。但是,采用objcopy的--strip-debug选项也可以达到同样的目的。

objcopy最重要的功能就是能按照我们的需要抽取程序文件中的段。在嵌入式系统中,比如制作boot loader时就会需要用到objcopy,以便将代码段抽取出来,然后使用烧写器将代码烧写到系统的启动运行地指处。

ranlib

ranlib的功能相对简单,就是用于在档案文件中生成文件索引。ar中的s参数也有同样的功能。当档案文件增加了索引后,对于其中文件的存取速度将更快。

readelf

readelf工具的功能其实objdump都有。

size

size工具也很简单,就是列出程序文件中各段的大小。

注:在使用objdump查看段信息时,列出的段有.text、.data、.bss、.rdata、.idata。在使用size列出各段大小时,将.rdata被归类到.text段中,.idata被归类到.data段中。

如果使用-A选项,size将列出与objdump相同的段及段的大小。

strings

strings用于查看我们的程序文件中的可显示字符。

注,版本信息和密码信息都可以从strings的输出结果中找到。

由于strings是输出.data段中的字符串信息的,因此,strings工具与具体的处理器是无关的。

strip

strip的功能也相对的简单,主要用于去除程序文件中的调试信息以便减小文件的大小。

以上内容主要参考自:http://yunli.blog.51cto.com/831344/186727

转载于:https://www.cnblogs.com/nufangrensheng/p/3657363.html

Binutils工具集中的一些比较常用的工具相关推荐

  1. [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库

    在日常开发的过程当中我们总是会根据项目的开发需求将一些公用的类或者方法进行抽象封装,这些类或方法的抽象封装可能是基于某个项目或者多个项目,最常见的应该就是SQLHelper了,这些类库在实际使用的过程 ...

  2. pipe建模工具使用_几种常用建模工具核心对比

    几种常用建模工具核心对比 以下是几种常用建模工具核心对比: 1.适用范围 ROSE:需求分析,详细设计,软件框架生成(C++,   Java,   ANSI   SQL,   Oracle) ERWI ...

  3. 【媒体工具】音视频信息常用解析工具

    前言 信息查看工具 综合信息查看:MediaInfo 二进制信息查看:UltraEdit 单项详细分析 封装格式:Elecard Format Analyzer 视频编码数据:Elecard Stre ...

  4. 【IDEA】【工具】提升幸福感 开发常用的工具 插件/网站/软件

    目录 IDEA 插件 CodeGlance Pro -- 代码地图 Alibaba Java Coding Guidelines -- 代码规范扫描 Background Image Plus -- ...

  5. CTF常用脚本工具(附下载地址)

    该项目主要记录CTF中用到的工具 Base base64解码输出字节文本 base64隐写加密与解密 base64连续解码 Base64扩展 base64字符替换表 B64-B32-B16解密 b16 ...

  6. 安全测试常用的工具有哪些?这些不能少!

    安全测试是一个非常复杂的过程,不仅需要工作者具备专业的技术水平,还需要熟练掌握各种各样的安全测试工具,那么安全测试常用的工具有哪些呢?本文为大家整理了安全测试常用的几个工具,快来看看吧. 1.端口扫描 ...

  7. java ee有哪些工具_JavaEE开发中最常用到的技术和工具汇总

    原标题:JavaEE开发中最常用到的技术和工具汇总 今天千锋广州小编给大家来介绍一下关于目前JavaEE开发中最常用到的技术和工具的介绍,下面我们一起来看一下吧. 项目管理:Ant,项目管理事实上的标 ...

  8. shell编程系列7--shell中常用的工具find、locate、which、whereis

    shell编程系列7--shell中常用的工具find.locate.which.whereis1.文件查找之find命令语法格式:find [路径] [选项] [操作]选项 -name 根据文件名查 ...

  9. 我的常用在线工具网站

    小伙伴们大家好,本期再托一次家底,和大家分享十几个自己日常工作学习过程中的常用在线工具和网站,希望能有帮助. 也欢迎小伙伴们分享和安利出你们觉得有用的工具,不要停啊. 本文 Github 开源项目:g ...

最新文章

  1. jsp 插入mysql乱码_JSP MySQL插入数据时出现中文乱码问题的解决方法
  2. 安装itunes需要管理员身份_Windows 10 在microsoft store 微软商店里安装的itunes如何更改备份位置...
  3. linux git hudson,如何使用SSH密钥配置Hudson和git插件
  4. 少侠请重新来过 - Vue学习笔记(二) - Vue生命周期
  5. GPU Gems2 - 4 分段缓冲(Segment Buffering)
  6. 9种排序算法在四种数据分布下的速度比较
  7. SpringBoot2基础,进阶,数据库,中间件等系列文章目录分类
  8. keypairgenerator生成的公钥是不变的么_bitcoin 地址是如何生成的
  9. RestTemplate的异常 Not enough variables available to expand
  10. IOS开发者证书申请及应用上线发布详解(2014版)
  11. Idea快捷键大全(Windows)
  12. Oauth2的异常处理,统一封装
  13. 逻辑程序设计语言Prolog
  14. 【笔记】软件质量保证(Software Quality Assurance)复习笔记
  15. Android HPSocket SE_SOCKET_CREATE (3)
  16. Windows系统设置局域网共享 解决:登录失败,用户账号限制。可能的原因包括不允许空密码,登录时间限制,或强制的策略限制
  17. [工具使用]黑暗引擎FOFA
  18. c语言提示函数已有主体,C++中的函数名称粉碎机制和它的逆向应用 筋斗云网络...
  19. 时间固定效应和个体固定效应的选择_【十分钟计量经济学】面板数据选择固定效应还是随机效应...
  20. OSI模型工作模式解析

热门文章

  1. Go语言---字符串的基本操作
  2. 零基础带你学习MySQL—Delete语句以及注意事项(九)
  3. JavaScript学习(三十五)—拖动元素
  4. JavaScript学习(二十一)—scrollTop属性和scrollLeft属性
  5. 都有数据一直报空指针_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)...
  6. 除权除息对散户是利好还是不利好?
  7. 股市三大定律是什么?
  8. 年轻人选择创业时,最好避开门槛低的行业
  9. 真正聪明的人必有的4个习惯
  10. 你还在盲目做抖音吗?