Analysis .a static library
本文于 912 天之前發表,文章内容可能已經過時。
分析 .a 靜態庫
分析 .a 靜態庫
靜態庫 .a 就是一組 .o 文件的 ar 包,可以用ar -t
查看 .a 包含的所有 .o 。
1 | ar -x somelib_armv7.a |
1 | ➜ CheckBundleIDSDK ar -t libDGCCheckBundleID_arm64.a |
這是一個經過混淆加密後的 object code:
1 | ➜ CheckBundleIDSDK cat 1.o |
報錯
在解壓縮 .a 文件時,報錯:is a fat file (use libtool(1) or lipo(1) and ar(1) on it),原因是 .a 文件包含了多個 cpu 架構,比如arm64, armv7, armv7s等。
解決方法:首先使用如下指令解壓出需要的架構(其中”CheckBundleIDSDK.a”代表需要解壓的 .a 文件)
1 | # 解壓縮 64指令集 |
這樣獲得解壓出來的.a(somelib_arm64.a,somelib_armv7s.a)後,再使用如下命令解壓獲得.o文件:
1 | ar -x somelib_armv7.a -o |
後記
armv7、armv7s、arm64都是ARM處理器的指令集
i386、x86_64 是Mac處理器的指令集
目前市面上手機幾乎是arm64,故其他可以不用太過關注。
ARM 指令集 | 設備 |
---|---|
arm64 | iPhone6s iphone6s plus iPhone6 iPhone6 plus iPhone5S iPad Air iPad mini2(iPad mini with Retina Display) |
armv7s | iPhone5 iPhone5C iPad4(iPad with Retina Display) |
armv7 | iPhone4 iPhone4S iPad2… 等 |
i386 是針對 intel 通用微處理器32位處理器
x86_64 是針對 x86 架構的64位處理器
模擬器32位處理器測試需要 i386 架構,
模擬器64位處理器測試需要 x86_64 架構,
真機32位處理器需要 armv7, 或者 armv7s 架構,
真機64位處理器需要 arm64 架構。