在Mac平台下,可以使用nm命令来查看一个文件的符号表信息。nm命令行工具是附带在Xcode中的,因此在使用之前请事先安装好Xcode。
nm命令的格式大致如下:
nm [ -agnoprumxjlfPA [ s segname sectname ] ] [ - ] [ -t format ] [ [ -arch arch_flag ]... ] [ file ... ]
如果不带任何可选参数的话,使用nm命令将会列出指定文件中的所有符号,符号出现的次序默认按照字符排序。如果符号代表的是一个由Object C语言编写的函数,那么其名字将是+-[Class_name(category_name) method:name:]。
对于每一个符号,其格式是“符号值
符号类型
符号名”:
不过可以看到,nm命令也有许多的参数可选,这些参数的大致作用如下:
-a,显示所有符号,包括那些专门用来调试的符号。
-g,只显示全局符号,不显示局部符号。
-n,按照数字而不是默认的字符排序。
-p,不排序,按照符号在符号表中出现的次序显示。
-r,符号按照反序显示(默认就是按照符号名字字符排序的反序,如果带上-p参数就是按照在符号表中出现次序的反序,如果带上-n参数就是按照符号名数字排序的反序)。
-u,只显示未定义的符号。
-U,不显示未定义的符号,与-u的作用刚好相反。
-j,只显示符号的名字,而不显示符号对应的数值和类型。
-s
segname sectname
只解析位于文件中
segname
段里
sectname
节内的符号。
-arch
archtype
OS X和iOS系统都是支持所谓的肥(Fat)文件的,也就是一个大文件中包含了分别对不同平台支持的文件。
默认情况下,nm会将其中每一个平台文件中所包含的符号都列出来。如果你只想看某一个平台文件中的符号,可以用这个选项指定。
例如,对于包含了32位armv7指令集和64位armv8指令集的iOS可执行文件来说,如果只想看表示32位armv7指令集部分的符号,可以加上
-arch arm
参数;而如果想看表示64位armv8指令集部分的符号,可以加上
-arch arm64
参数。
-x,将以16进制的形式显示符号表中所有符号每一项的值,格式如下:
-A,在每一行符号的前面加上文件名。
-P,以简单格式显示每一个符号,格式如下:
-t
format
,如果使用前面的-P参数,则符号的数值将使用16进制表示,但是可以再加上-t参数来指定用别的格式显示符号的值。主要有下面几种:
d:以10进制显示;
o:以8进制显示;
x:以16进制显示(默认)。
一般来说,在每个符号的前面,都有一个字母来表示这个符号的类型。对于每一个符号来说,其类型如果是小写字母表示的的,则说明该符号是本地(Local)的或者说是内部(Internal)的,而如果是大写字母表示的,则说明该符号是全局的,也就是可供外部(External)访问的。
一共主要有以下几种类型:
1)U,未定义符号
表示这个符号没有在本文件中定义,需要解析别的文件从而找出对应符号的定义。
例如,当前文件调用另一个文件中定义的函数或者全局变量,这个被调用的函数或全局变量在当前文件中就是未定义的。(但是,在定义它的文件中,如果是函数则对应的类型是T,而如果是全局变量则其符号类型为C)。
2)A,绝对符号
表示该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这种类型的符号常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。
3)T,定义在__TEXT段__text区(代码区)中的符号
表示该符号位于代码区中,其值表示该符号在整个文件当中的所处的位置。
有点奇怪的是符号“
__mh_execute_header
”竟然类型也为T,算作在代码区定义的符号。
4)D,定义在__DATA段__data区中的符号
表明该符号位于初始化数据区中,其值表示该符号在整个文件当中的所处的位置。
5)B,定义在__DATA段__bss区中的符号
表明该符号位于非初始化数据区中,其值表示该符号在bss段中的偏移。
6)C,所谓的普通(Common)符号,定义在__DATA段__common区中的符号
普通符号是定义在一个未初始化数据段内的符号。该符号没有包含于一个普通的区中,只有在链接过程中才进行分配,符号的值表示该符号需要的字节数。例如在一个C文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C,否则其类型为B。
7)I,间接符号
说明这个符号是仅仅是对另一个符号的间接引用。
8)S,其它符号
定义在除前所述其它地方的符号,例如出现在__TEXT段__const区中的符号。
在今天举行的 Globalpress 2006 全球电子峰会上,可编程逻辑解决方案全球领先供应商及 FPGA 发明厂商赛灵思公司 (Xilinx)展示了其 65
nm
工艺新一代 Virtex:trade_mark: FPGA 系列中的首款器件。Virtex:trade_mark:FPGA 系列是世界上应用最广泛的 FPGA 系列,累计销售收入已超过 40 亿美元。 “赛灵思通过创新和向下一代工艺节点积极推进等一系列措施,长期以来一直致力于为我们的客户提供最优的性能、容量、功耗和成本优势,”赛灵思公司董事会主席、总裁兼 CEO Wim Roelandts 说。“我们在 2004 年推出的 90
nm
Virtex-4 系列获得了极大的成功
Mac
:
默认调用Xcode下的
命令
:objdump -t lib*.a | grep 貌似只能
查看
静态库
nm
-D | grep 可以
查看
动态库和静态库,但有时候获取的
符号表
不全
androidndkdir/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-and
Mac
命令
行
https://www.cnblogs.com/-
ios
/p/4949923.html
Join the chat at https://gitter.im/jlevy/the-art-of-command-line
日常
使用
文件
及数据处理
冷门但有用
仅限
Mac
OS X 系统
curl -s ‘https://raw...
在学习
iOS
安全的时候,老是看到有个
nm
命令
,今天就来好好梳理下
nm
这个
命令
。
先来说说
符号表
,
符号表
可以提供应用软件及其动态加载的苦衷引用的函数、类、方法等信息。通常,
符号表
中包含比类转储更多的信息,并且还包含了应用软件
使用
的C或者C++ 组件的信息。就好比你要去某个城市某个地方,首先你得需要一张地图才能找得到某个地方吧。
符号表
就是这张地图。
nm
命令
作用就是显示目标
文件
的符号
一、背景介绍
最近新版本审核时被拒了,Apple给出的原因是
使用
到了Intents的功能,但是Info.plist中并未给出
使用
简介导致被拒。由于我们的App并不需要
使用
Intents等能力,所以需要排查是哪些第三方库引入的Intents.framework。下面将介绍在分析二进制
文件
时常用的一些
命令
,帮助我们快速定位问题。
首先下载jenkins打好包的IPA
文件
,修改ipa后缀为zip并解压,在
命令
行中cd 进入/Payload/TestProje..
在启动时倒计时前3秒可以进入uboot
命令
行(也有可能不是三秒根据uboot中的delay环境变量决定)。
命令
行中输入boot启动内核。
uboot
命令
行的一些基本
命令
:
帮助
命令
:
help:
查看
当前uboot所支持的所有
命令
?
命令
名:
查看
该
命令
的帮助信息
环境变量:
printenv:
查看
环境变量 (环境变量就是一些变量,只不过这些变量与环境有关,值是字符串)
setnev: 设置环境变量(该
命令
可用于修改(如修改字符串setenv 环境变量名 ‘要修改的值’)、新建(se
//无符号 unsigned 有符号singend(有符号可以省略)
//有符号数是最高位为符号位,0代表正数,1代表负数。
//无符号数最高位不是符号位,而就是数的一部分,无符号数不可能是负数。
//%u——输出unsigned int类型-即表示输出一个无符号十进制整型数据
//% d——输出int类型
signed int a = -10;
printf("%d\n", a);
最近苹果的热更新和私有库问题检查的更严了,如果应用被拒,苹果在拒绝信中会说到
使用
strings/otool/
nm
命令
进行自查,所以总结了一些
命令
,方便查找和定位
文件
内容相关信息。
1、grep
作用:判断是否包含字符串
使用
示例:
grep -r "xxx” path
检查是否包含(weixin...