binutils工具集
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了binutils工具集相关的知识,希望对你有一定的参考价值。
参考技术A GNU binutils是一个二进制工具集。主要包括:ld:gnu链接器;
as:gnu汇编器。
也包括:
addr2line:把地址转化为文件名和行号;
nm:列出目标文件的符号列表;
objdump:显示目标文件信息;
readelf:显示elf格式的文件信息;
objcopy:拷贝部分section以生成新的可执行文件,elf->hex,elf->bin等;
ar:创建,修改,解压一个静态库文件;
size:显示目标文件的节大小;
strings:从目标文件中列出可打印的字符串;
c++filt:过滤c++符号为可识别的c符号;
ranlib:生成库文件中的.o文件索引;
strip:丢弃程序文件中的符号信息。
以上就是binutils工具集,它们大都使用BFD,二进制文件描述符库。为了更低等级的操作,它们很多也使用opcodes库来汇编以及反汇编机器指令。
那么那几个比较重要呢?
很显然有:objdump,readelf,以及addr2line和nm。因为当报错,需要debug时,需要用到它们。ld和as当然也非常重要,但它们用于编译链接,而且命令复杂得单独剔出来讲解。
次重要有:objcopy,ar,size,string,因为它们很少用到,一般是写到makefile中。
最次的有:c++filt,ranlib,strip,因为它们的功能完全可以被上面重要的binutils替代。
addr2line:
addr2line 0x401110 -f -e test.elf
addr2line 0x401110 --demangle -f -e test.elf
从而获得该地址所在有的符号和源码文件名。使用addr2line的前提是程序文件中存在符号表,即编译时有-g调试参数。
它可以结合nm使用,效果最佳。
nm -n test.elf
nm --demangle -n test.elf
通过nm可以找到对应的符号,以及符号的地址和符号所放的位置。
然后通过符号的地址,使用addr2line找到符号所在源码文件名。
nm中符号符号所放的位置如下:
objdump -D –S test.elf
objcopy –j .text test.elf onlytest.elf
objcopy -R .text test.elf notext.elf
objcopy --strip-debug test.elf == strip test.elf
ar crs libtest.a foo.o bar.o ====ranlib libtest.a仅添加索引类似
最后,怎么使用二进制工具不重要,重要的是你大概知道每个工具有什么用,需要用到的时候可以尽快通过—help找到用法。更重要的是要了解elf原理,了解BFD,opcodes等等原理性质的东西。
你知道 GNU Binutils 吗?binutils
概述
从事 Linux 开发的朋友们都不可避免地用到一些工具,比如 objcopy、nm、objdump、readelf 等等。其实这一系列的工具,就是所谓的 Binutils,当然 GNU 就表示它们都是可以自由地使用的 GNU 软件。
GNU Binutils,是 GNU Binary Utilities 的简写,一般简称为 Binutils。中文可以翻译为 GNU 的二进制工具集。显然,Binutils 是一组二进制工具的集合。也就是说,Binutils 不是指某一个工具,而是指一组工具,并且这些工具都是专门针对于二进制的。注意,这里千万不要理解错了,不是说这些 Binutils 工具只提供二进制文件,而是说这些工具的目的是用于操作二进制文件的,而不是针对于文本或者源代码。
再说一遍:Binutils 工具是专门用于操作二进制的,而不是用于去操作或者编译文本、源代码的。
在 Linux 环境下,这种二进制文件主要指 *.o 文件和 elf 执行文件。显然,编译源代码的是 gcc,所以 Binutils 不包含 gcc(这是一种简单的说法,实际上还是有很多关联的)。
Binutils 工具
现在我们已经知道,Binutils 是一组工具集合,那到底包含了哪些工具呢?
Binutils 中比较重要的是 ld 和 as。
ld —— 链接器
将多个目标文件,链接成一个可执行文件(或目标库文件)。
as —— 汇编器
将汇编源代码,编译为(目标)机器代码。
另外还有下面这些相对次要的,但非常实用的工具:
addr2line
将地址转换为(文件名和)行号的工具,一般主要用于反汇编。
ar
用来操作(.a)档案文件,比如创建,修改,提取内容等
c++filt
Filter to demangle encoded C++ symbols
dlltool
Creates files for building and using DLLs
gold
一个新的,速度更快的,只针对于ELF的链接器(可能还不是很成熟稳定)。
gprof
Displays profiling information
nlmconv
Converts object code into an NLM
nm
列出目标文件中的符号
objcopy
拷贝并翻译(转换)文件,可用于不同格式的二进制文件的转换。
objdump
显示目标文件中的信息。
ranlib
Generates an index to the contents of an archive
readelf
显示 ELF 格式的(目标)文件的信息。
size
显示目标文件或(.a)档案文件中的节(section)的大小。
strings
显示文件中的(可打印)的字符串信息。
strip
去除符号。一般用来把可执行文件中的一些信息(比如 debug 信息)去除掉,以实现在不影响程序功能的前提下,减少可执行文件的大小,减少程序的空间占用。
windmc
A Windows compatible message compiler
windres
A compiler for Windows resource files
官网:http://www.gnu.org/software/binutils/
文档下载:http://download.csdn.net/download/luckydarcy/10016030
---------------------
作者:阿基米东
来源:CSDN
原文:https://blog.csdn.net/lu_embedded/article/details/78205161
版权声明:本文为博主原创文章,转载请附上博文链接!
以上是关于binutils工具集的主要内容,如果未能解决你的问题,请参考以下文章