strings命令
strings命令在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
语法
strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ file ... ]
选项
-a --all:扫描整个文件而不是只扫描目标文件初始化和装载段
-f –print-file-name:在显示字符串前先显示文件名
-n –bytes=[number]:找到并且输出所有NUL终止符序列
- :设置显示的最少的字符数,默认是4个字符
-t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制
-o :类似--radix=o
-T --target= :指定二进制文件格式
-e --encoding={s,S,b,l,B,L} :选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit
@ :读取中选项
strings扫描静态库语法
-
strings命令扫描framework静态库
strings XXSDK.framework/XXSDK
-
strings命令扫描.a静态库
strings XXSDK.a
strings扫描静态库结果
- OBJC_CLASS:静态库中包含的类。
- OBJC_IVAR:类的成员变量(属性/变量)。
- OBJC_METACLASS:isa指针,指向该对象所属类型的类型对象(Class Object)。在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。
- l_OBJC_LABEL_PROTOCOL_:遵从的协议。
- l_OBJC_PROTOCOL_:遵从的协议。
- _变量名:用extern修饰的全局变量或者用const修饰的变量。
- _函数名:内联函数。
- _枚举名:用NS_OPTIONS定义的枚举。
- 方法名:方法。
- .cxx_destruct:隐藏的.cxx_destruct方法。
- 字符串:字符串。
strings命令解决duplicate symbol问题
在两个SDK的.m文件中定义了相同的全局变量,编译时会报duplicate symbol错误。这时候在项目中全局搜索重复的全局变量名是搜索不到任何结果的,也就没办法知道是哪里重复了。这时候strings命令就派上用场了,用strings命令扫描静态库就可以找到重复的全局变量是在哪个类中定义的。