LinkMap诡探
Xcode中配置LinkMap
LinkMap文件是Xcode产生可执行文件(Mach-O)的同时生成的链接信息,用来描述可执行文件的构造成分,包括代码段(__TEXT)和数据段(__DATA)的分布情况。XCode -> Project -> Build Settings -> 搜map -> 把Write Link Map File选项设为yes,并指定好linkMap的存储位置,如下图


编译后,到编译目录里找到该txt文件,文件名和路径就是上述的Path to Link Map File位于~/Library/Developer/Xcode/DerivedData/XXX-eumsvrzbvgfofvbfsoqokmjprvuh/Build/Intermediates/XXX.build/Debug-iphoneos/XXX.build/xxx.txt
从文件中,我么可以看到这个LinkMap里展示这个可执行文件的全貌,分为三段,分别是:
Object files:列出所有.o目标文件的信息(包括静态链接库.a里的或者动态库framework的)
Sections:描述各个段在最后编译成的可执行文件中偏移位置的大小包括了代码段(__TEXT,保存程序代码段编译后的机器码)和数据段(__DATA,保存变量值),字段的含义在Mach-o中已详细介绍。
Symbols:列出具体的按每个文件列出每个对应字段的位置和占用空间
Otool 分析二进制
otool -s __TEXT __stubs 二进制路径

通过这两操作,我们可以看到framework其实如果被打包进入到了.app之后,会发现其实是找不到那些宏定义之前的文件的啦,宏定义之后的文件,我们可以通过逆向工具等可以查看到,但是宏定义之前的文件是看不到的了,所以生成类的方式混淆和宏定义方式的混淆其实是一样的
网友评论