一. Linux下常用 shell 命令-说明一
1. strings 命令
strings 命令在对象文件或二进制文件中查找可打印的字符串。
常用的选项:
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段
-f –print-file-name:在显示字符串前先显示文件名
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
使用方式如下:
strings libAPI.so | grep xxx: 显示库文件中某些重要信息。
strings a.out | grep xxx: 查看可执行文件中某些关键信息。
等等一系列操作。
2. strip 命令
strip 命令从目标文件或可执行文件中剥掉一些符号信息和调试信息,使文件变小。
在 Linux 开发中,除了执行文件以外,会有一个用来调试的文件,类型为 not striped,想要了解此文件的作用以及产生的原因,就会涉及 strip 命令。
strip 命令不仅仅可以针对可执行文件, 还能针对目标文件和动态库等。
如下对一个可执行程序进行操作:
首先,输入 ls -l main.out 命令查看下文件大小。
其次,输入 file main.out 命令可以看到 main.out 文件为 not striped类型的。
其次,使用 nm main.out 命令可以看到 main.out 文件的符号信息。
接下来可以使用 strip 命令对目标文件中符号信息进行剥离。如下所示:
可以看到,使用 strip main.out 命令对目标程序进行了符号剥离之后,目标文件变小了,类型已经是 stripped 类型的文件,同时已经不含有符号信息。
strip 作用:
1. 剥离之后比剥离之前的文件小,依然可以正常运行,这样可以节省空间。
2. 在实际的开发中, 经常需要对动态库.so 进行 strip 操作, 减少占地空间。
而在调试的时候(比如用 addr2line 命令), 就需要带符号信息的可执行文件来方便调试。
通常的做法是: strip 前的库用来调试, strip 后的库用来实际发布, 他们两者有对应关系。 一旦发布的 strip 后的库出了问题, 就可以找对应的未 strip 的库来定位。