<安全攻防之通用二进制文件>

$通用二进制(Universal binary)

苹果电脑公司提出的一种程序代码,在同一个程序包中同时为两种架构提供最理想的性能,当程序在操作系统中运行后,将自动检测通用二进制代码,然后根据使用的架构自动选择合适的代码来执行,因此实现无损的本地程序运行速度。
Xcode编译可以指定生成哪些类型的MachO文件.是根据Architectures和Valid Architectures交集决定的,在Debug模式下,会根据手机的系统决定生成与手机系统对应的架构,在release模式下会默认生成armv7和arm64两种架构的合并.


architercture.png

$lipo命令

我们可以通过lipo -info xxx 或 file xxx 查看MachO可执行文件有哪些架构

$lipo -info xxx
或者
$file xxx

如果包含多种架构,我们可以给二进制文件的瘦身,拆分多种架构的二进制文件

$lipo xxx -thin armv7 -output xxx输出的文件名      // armv7架构
$lipo xxx -thin arm64 -output xxx输出的文件名     // arm64架构

也可以把多种架构的二进制整合成一个包含多种架构的二进制文件

$lipo -create xxx xxx -output xxx输出的文件名   // 参数1: 第一种架构的文件名 参数2:第二种架构的文件名 ...
在逆向开发中,我们通常把含有多种架构的MacO文件拆分开来单独分析,所以上边两条命令会经常使用.

你可能感兴趣的:(<安全攻防之通用二进制文件>)