Mach-O

一瓮栗、Mach-O簡(jiǎn)介

Mach-OMach object的縮寫袍榆,是Mac\iOS上用于存儲(chǔ)程序廉羔、庫(kù)的標(biāo)準(zhǔn)格式溉痢。

二、Mach-O格式的文件類型

#define MH_OBJECT   0x1     /* relocatable object file */
#define MH_EXECUTE  0x2     /* demand paged executable file */
#define MH_FVMLIB   0x3     /* fixed VM shared library file */
#define MH_CORE     0x4     /* core file */
#define MH_PRELOAD  0x5     /* preloaded executable file */
#define MH_DYLIB    0x6     /* dynamically bound shared library */
#define MH_DYLINKER 0x7     /* dynamic link editor */
#define MH_BUNDLE   0x8     /* dynamically bound bundle file */
#define MH_DYLIB_STUB   0x9     /* shared library stub for static */
                    /*  linking only, no section contents */
#define MH_DSYM     0xa     /* companion file with only debug */
                    /*  sections */
#define MH_KEXT_BUNDLE  0xb     /* x86_64 kexts */
#define MH_FILESET  0xc     /* set of mach-o's */

可以在xnu源碼中憋他,查看到Mach-O格式的詳細(xì)定義 xnu源碼

三孩饼、常見(jiàn)的Mach-O文件類型

1、MH_OBJECT

  • 目標(biāo)文件(.o)
  • 靜態(tài)庫(kù)文件(.a)竹挡,靜態(tài)庫(kù)其實(shí)就是N個(gè).o合并在一起

2镀娶、MH_EXECUTE:可執(zhí)行文件

  • .app/xxx

3、MH_DYLIB:動(dòng)態(tài)庫(kù)文件

  • .dylib
  • .framework/xx

4揪罕、MH_DYLINKER:動(dòng)態(tài)鏈接編輯器

  • /usr/lib/dyld

5梯码、MH_DSYM:存儲(chǔ)著二進(jìn)制文件符號(hào)信息的文件

  • .dSYM/Contents/Resources/DWARF/xx(常用于分析APP的崩潰信息)

四宝泵、窺探Mach-O的結(jié)構(gòu)

1、file:查看Mach-O的文件類型

  • file 文件路徑

2轩娶、otool:查看Mach-O特定部分和段的內(nèi)容

zydeMacBook-Pro:ppx zy$ otool
Usage: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool [-arch arch_type] [-fahlLDtdorSTMRIHGvVcXmqQjCP] [-mcpu=arg] [--version] <object file> ...
    -f print the fat headers
    -a print the archive header
    -h print the mach header
    -l print the load commands
    -L print shared libraries used
    -D print shared library id name
    -t print the text section (disassemble with -v)
    -x print all text sections (disassemble with -v)
    -p <routine name>  start dissassemble from routine name
    -s <segname> <sectname> print contents of section
    -d print the data section
    -o print the Objective-C segment
    -r print the relocation entries
    -S print the table of contents of a library (obsolete)
    -T print the table of contents of a dynamic shared library (obsolete)
    -M print the module table of a dynamic shared library (obsolete)
    -R print the reference table of a dynamic shared library (obsolete)
    -I print the indirect symbol table
    -H print the two-level hints table (obsolete)
    -G print the data in code table
    -v print verbosely (symbolically) when possible
    -V print disassembled operands symbolically
    -c print argument strings of a core file
    -X print no leading addresses or headers
    -m don't use archive(member) syntax
    -B force Thumb disassembly (ARM objects only)
    -q use llvm's disassembler (the default)
    -Q use otool(1)'s disassembler
    -mcpu=arg use `arg' as the cpu for disassembly
    -j print opcode bytes
    -P print the info plist section as strings
    -C print linker optimization hints
    --version print the version of /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool
  • 1儿奶、打印依賴動(dòng)態(tài)庫(kù)
 otool -L Super
Super:
    /usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.8)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 1200.3.0)
    /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 1200.3.0)
    /usr/lib/libcompression.dylib (compatibility version 1.0.0, current version 1.0.0, weak)
    /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
    /usr/lib/libicucore.A.dylib (compatibility version 1.0.0, current version 68.2.0)
    /usr/lib/liblzma.5.dylib (compatibility version 6.0.0, current version 6.3.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1311.0.0)
  • 2、打印頭信息
otool -h Super
Super:
Mach header
      magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
 0xfeedfacf 16777228          0  0x00           2   109      12240 0x00a10085

3鳄抒、lipo:常用于多架構(gòu)Mach-O文件的處理

  • 查看架構(gòu)信息:lipo -info 文件路徑
  • 導(dǎo)出某種特定架構(gòu):lipo 文件路徑 -thin 架構(gòu)類型 -output 輸出文件路徑
  • 合并多種架構(gòu):lipo 文件路徑1 文件路徑2 -output 輸出文件路徑

五闯捎、dyld和Mach-O

1.位置

iOS中,是使用了/usr/lib/dyld程序來(lái)加載動(dòng)態(tài)庫(kù)

2.dyld源碼

dyld

3.dyld用于加載以下類型的Mach-O文件

查看源碼在方法 (loadPhase6(int fd, const struct stat& stat_buf, const char* path, const LoadContext& context))

// only MH_BUNDLE, MH_DYLIB, and some MH_EXECUTE can be dynamically loaded
        const mach_header* mh = (mach_header*)firstPages;
        switch ( mh->filetype ) {
            case MH_EXECUTE:
            case MH_DYLIB:
            case MH_BUNDLE:
                break;
            default:
                throw "mach-o, but wrong filetype";
        }

六许溅、Mach-O的基本結(jié)構(gòu)

1瓤鼻、官方描述 Mach-O Programming Topics

Mach-O

2、Mach-O文件包含3個(gè)主要區(qū)域

1闹司、Header
  • 文件類型娱仔、目標(biāo)架構(gòu)類型等
2、Load commands
  • 描述文件在虛擬內(nèi)存中的邏輯結(jié)構(gòu)游桩、布局
3牲迫、Raw segment data
  • 在Load commands中定義的Segment的原始數(shù)據(jù)

未完待續(xù)。借卧。盹憎。。铐刘。陪每。。镰吵。檩禾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疤祭,隨后出現(xiàn)的幾起案子盼产,更是在濱河造成了極大的恐慌,老刑警劉巖勺馆,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戏售,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡草穆,警方通過(guò)查閱死者的電腦和手機(jī)灌灾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悲柱,“玉大人锋喜,你說(shuō)我怎么就攤上這事⊥慵Γ” “怎么了嘿般?”我有些...
    開(kāi)封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵轴总,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我博个,道長(zhǎng),這世上最難降的妖魔是什么功偿? 我笑而不...
    開(kāi)封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任盆佣,我火速辦了婚禮,結(jié)果婚禮上械荷,老公的妹妹穿的比我還像新娘共耍。我一直安慰自己,他們只是感情好吨瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布痹兜。 她就那樣靜靜地躺著,像睡著了一般颤诀。 火紅的嫁衣襯著肌膚如雪字旭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天崖叫,我揣著相機(jī)與錄音遗淳,去河邊找鬼。 笑死心傀,一個(gè)胖子當(dāng)著我的面吹牛屈暗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播脂男,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼养叛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宰翅?” 一聲冷哼從身側(cè)響起弃甥,我...
    開(kāi)封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堕油,沒(méi)想到半個(gè)月后潘飘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掉缺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年卜录,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眶明。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰毒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出搜囱,到底是詐尸還是另有隱情丑瞧,我是刑警寧澤柑土,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绊汹,受9級(jí)特大地震影響稽屏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜西乖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一狐榔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧获雕,春花似錦薄腻、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至楣颠,卻和暖如春尽纽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背童漩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蜓斧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人睁冬。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓挎春,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豆拨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子直奋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 逆向APP的思路 1.界面分析A.CycriptB.Reveal 2.代碼分析A.對(duì)Mach-O文件的靜態(tài)分析B....
    木槿WEIXIAO閱讀 421評(píng)論 0 2
  • 逆向App的基本步驟 界面分析Cycript、Reveal 代碼分析對(duì)Mach-O文件的靜態(tài)分析MachOView...
    迷心迷閱讀 746評(píng)論 0 0
  • 一施禾、簡(jiǎn)介 Mach-O是Mach object的縮寫脚线,是Mac\iOS上用于存儲(chǔ)程序、庫(kù)的標(biāo)準(zhǔn)格式 屬于Mach-...
    阿凡提說(shuō)AI閱讀 345評(píng)論 0 0
  • APP從開(kāi)發(fā)到安裝到手機(jī)的過(guò)程1 APP從開(kāi)發(fā)到安裝到手機(jī)的過(guò)程2 逆向APP的思路 界面分析 Cycript弥搞、R...
    e297b14c9e53閱讀 507評(píng)論 0 0
  • 目錄一邮绿,APP從開(kāi)發(fā)到安裝的過(guò)程二,class-dump三攀例,Hopper Disassembler四船逮,動(dòng)態(tài)庫(kù)共享緩...
    碼小菜閱讀 1,585評(píng)論 0 9