首先保证是二进制文件是 thin的,不能是fat binary(multiarchitecture binary)fat
减肥方法
lipo -thin armv7 old.bin -o new.bin 或者 ditto --arch armv7 bin
1. 修改load命令的数目,位于0×10处,4个字节
比如,如果load命令的数目是 0x2c,就改为0x2B
2. 修改load命令的大小,位于0×14处, 4个字节
大小减去0×10
3. 从load命令 条目 中修改16个字节,用0×00替换
条目以1D 00 00 00标志开始, 实际上就是修改 8个字节的 load命令和 8个字节的load命令内容
在intel i386和arm中,载入命令总是 1D 00 00 00 10 00 00 00
4. 移除实际的代码签名
代码签名以 FA DE 0C C0 开始
5. 修改 LINKEDIT命令
vm size 和 file size都要减去 签名的大小
filesize是实际的文件大小
vm size必须以4KB 字节对齐,所以一般比file size大一些
另外:i386 thin binary文件是以 CE FA ED FE 开始的
而x64 thin binary文件是以 CF FA ED FE 开始的
armv7 thin binary也是以 CE FA ED FE 开始的