linux binutils

1 strings
strings - print the strings of printable characters in files.
这个文件可以是文本文件(test.c), 可执行文件(test), 动态链接库(test.o), 静态链接库(test.a)
strings main.c | grep main
strings main | grep main
strings -f “*.so” | grep “xxxxxx” -f –print-file-name:在显示字符串前先显示文件名
strings a.out | grep hello
列出ls中所有的ASCII文本:
strings /bin/ls

查找ls中包含libc的字符串,不区分大小写:
strings /bin/ls | grep -i libc

2 strip
这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了
file a.out
nm a.out
strip用于脱掉文件的衣服, 文件会变小, 其中的符号信息会失去。 那这个strip有什么用呢? 很有用的! 原来的a.out比较大, 可以执行。 在strip之后, 文件变小了, 仍然可以执行, 这就就节省了很多空间。
其实, strip不仅仅可以针对可执行文件, 还能针对目标文件和动态库等。
strip a.out
在实际的开发中, 经常需要对动态库.so进行strip操作, 减少占地空间。 而在调试的时候(比如用addr2line), 就需要符号了。
因此, 通常的做法是: strip前的库用来调试, strip后的库用来实际发布, 他们两者有对应关系。 一旦发布的strip后的库出了问题, 就可以找对应的未strip的库来定位。

3 nm
是names的缩写, nm命令主要是用来列出某些文件中的符号(说白了就是一些函数和全局变量等)。
对于目标文件和可执行文件而言, 均可以获得其中的函数
可以从静态库和动态库中获取到函数名称;
nm main | grep main

4 readelf
了解了ELF文件, 其实就是Executable & Linkable Format, 是一种文件格式, 我们常见的目标文件、动态库和可执行文件, 都属于这个类型。
readelf命令, 这个命令的作用就是读取ELF文件中信息
readelf -a a.out
5.ar
ar - create, modify, and extract from archives
ar -rv libtest.a hello.o hello1.o
加入新成员
列出库中已有成员
删除库中成员
调整库中成员的顺序
ar -t libname.a //显示所有对象文件(.o文件)的列表.

6 objdump
文件命令功能强的惊人。能实现上述两个命令(ar,nm)的很多功能。它主要是查看对象文件的内容信息。
objdump -h libtest1.o

猜你喜欢

转载自blog.csdn.net/a379039233/article/details/79781790