Mach-O格式全稱為Mach Object文件格式的縮寫夺巩,是mac上可執(zhí)行文件的格式,類似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format)由蘑。
MachOView下載地址:http://sourceforge.net/projects/machoview/
MachOView源碼地址:https://github.com/gdbinit/MachOView
mach-o文件類型分為:
1参袱、Executable:應(yīng)用的主要二進(jìn)制
2、Dylib Library:動態(tài)鏈接庫(又稱DSO或DLL)
3浑彰、Static Library:靜態(tài)鏈接庫
4恭理、Bundle:不能被鏈接的Dylib,只能在運(yùn)行時(shí)使用dlopen( )加載闸昨,可當(dāng)做macOS的插件
5蚯斯、Relocatable Object File :可重定向文件類型
什么是FatFile/FatBinary?
簡單來說饵较,就是一個(gè)由不同的編譯架構(gòu)后的Mach-O產(chǎn)物所合成的集合體拍嵌。一個(gè)架構(gòu)的mach-O只能在相同架構(gòu)的機(jī)器或者模擬器上用,為了支持不同架構(gòu)需要一個(gè)集合體循诉。
一横辆、使用方式
1、MachOView工具概述
MachOView工具可Mac平臺中可查看MachO文件格式信息茄猫,IOS系統(tǒng)中可執(zhí)行程序?qū)儆贛ach-O文件格式狈蚤,有必要介紹如何利用工具快速查看Mach-O文件格式。MachOView工具屬于免費(fèi)開源項(xiàng)目划纽,源代碼可在https://github.com/gdbinit/MachOView下載脆侮,MachOView安裝之后文件布局如下圖所示:
點(diǎn)擊“MachOView”之后,便在Mac系統(tǒng)左上角出現(xiàn)MachOView工具的操作菜單勇劣,對應(yīng)功能菜單如下圖所示:
將“MachOView”拖到Application文件夾靖避,就可以像其他程序一樣啟動了
下面介紹MachOView文件功能使用潭枣。
2、加載Mach-O文件
點(diǎn)擊MachOView工具的主菜單“File”中的“Open”選項(xiàng)便可加載IOS平臺可執(zhí)行文件幻捏,對應(yīng)功能接入如下所示:
例如加載文件名為“l(fā)ibLDCPCircle.a”的靜態(tài)庫文件盆犁,加載成功之后顯示的界面如下圖所示:
上圖界面出現(xiàn)表明Mach-O文件加載完畢。
3篡九、文件頭信息
MachOView工具成功加載Mach-O文件之后谐岁,每個(gè).o文件對應(yīng)一個(gè)類編譯后的文件,展開每個(gè)類如下如:
在左邊窗口點(diǎn)擊“Mach Header”選項(xiàng)榛臼,可以看到每個(gè)類的cpu架構(gòu)信息伊佃、load commands數(shù)量 、load commandssize 讽坏、file type等信息锭魔。
4例证、查看Fat文件
我們打開一個(gè)Fat文件可以看到:
可以看到路呜,fat文件只是對各種架構(gòu)文件的組裝,點(diǎn)開 “Fat Header”可以看到支持的架構(gòu)织咧,圖中顯示的支持ARM_V7 胀葱、ARM_V7S 、ARM_64 笙蒙、i386 抵屿、 X86_64。
點(diǎn)開每一個(gè)Static Library 可以看到捅位,和每一個(gè)單獨(dú)的Static Library的信息一樣轧葛。
小命令:
lipo LoginSDK.a -thin armv7 -output arm/LoginSDK.a 將fat文件拆分得到armv7類型
lipo -create ibSyncSDKA.i386.a libSyncSDK.arm7.a -output libSyncSDK.a 合成一個(gè)i386和armV7架構(gòu)的fat文件
轉(zhuǎn)自作者:ITxiansheng
鏈接:http://www.reibang.com/p/175925ab3355