認(rèn)識(shí)Mach-O

0x01 什么是Mach-O

? ? ? ? Mach-O為Mach Object文件格式的縮寫拾碌,它是一種用于可執(zhí)行文件,目標(biāo)代碼,動(dòng)態(tài)庫,內(nèi)核轉(zhuǎn)儲(chǔ)的文件格式丑掺。作為a.out格式的替代,Mach-O提供了更強(qiáng)的擴(kuò)展性述雾,并提升了符號(hào)表中信息的訪問速度街州。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——維基百科

? ? ? ? Mach-O格式全稱為Mach Object文件格式的縮寫,是mac上可執(zhí)行文件的格式玻孟, 類似于windows上的PE格式 (Portable Executable ), linux上的elf格式 (Executable and Linking Format)


0x02 Mach-O的結(jié)構(gòu)


Mach-o包含三個(gè)基本區(qū)域:

頭部(header structure)唆缴。

加載命令(load command)。

段(segment)黍翎∶婊眨可以擁有多個(gè)段(segment),每個(gè)段可以擁有零個(gè)或多個(gè)區(qū)域(section)匣掸。每一個(gè)段(segment)都擁有一段虛擬地址映射到進(jìn)程的地址空間趟紊。

鏈接信息。一個(gè)完整的用戶級(jí)Mach-o文件的末端是鏈接信息碰酝。其中包含了動(dòng)態(tài)加載器用來鏈接可執(zhí)行文件或者依賴庫所需使用的符號(hào)表织阳,字符串表等等。

1.magic砰粹,是mach-o文件的魔數(shù)唧躲,0xfeedface代表的是32位,0xfeedfacf代表64位

2.cputype和cupsubtype代表的是cpu的類型和其子類型碱璃,例子中分別是c和9,定義如下:

#define CPU_TYPE_ARM((cpu_type_t) 12)

#define CPU_SUBTYPE_ARM_V7((cpu_subtype_t) 9

即為:armv7

3.接著是filetype弄痹,2,代表可執(zhí)行的文件

#defineMH_EXECUTE 0×2

4.ncmds 指的是加載命令(load commands)的數(shù)量嵌器,例子中一共23個(gè)肛真,編號(hào)0-22

5.sizeofcmds 表示23個(gè)load commands的總字節(jié)大小, load commands區(qū)域是緊接著header區(qū)域的爽航。


第一張圖截取的是第一個(gè)load command蚓让,從第一張圖所知道乾忱,cmd類型是segment_command,就是截圖的第2張圖历极,依次分析:

1.cmd 是load command的類型,本文中值=1就是LC_SEGMENT窄瘟,,LC_SEGMENT的含義是(將文件中的段映射到進(jìn)程地址空間)

2.cmdsize 代表load command的大小(0x38個(gè)字節(jié),從0x401C-0x4053)趟卸。

3.segname 16字節(jié)的段名字蹄葱,當(dāng)前是__PAGEZERO,有以下幾種段:

#defineSEG_PAGEZERO"__PAGEZERO"/* the pagezero segment which has no */

/* protections and catches NULL */

/* references for MH_EXECUTE files */

#defineSEG_TEXT"__TEXT"/* the tradition UNIX text segment */

#defineSEG_DATA"__DATA"/* the tradition UNIX data segment */

#defineSEG_OBJC"__OBJC"/* objective-C runtime segment */

#defineSEG_ICON"__ICON"/* the icon segment */

#defineSEG_LINKEDIT"__LINKEDIT"/* the segment containing all structs */

/* created and maintained by the link */

/* editor.? Created with -seglinkedit */

/* option to ld(1) for MH_EXECUTE and */

/* FVMLIB file types only */

#define SEG_IMPORT"__IMPORT"/* the segment for the self (dyld) */

/* modifing code stubs that has read, */

/* write and execute permissions */

4.vmaddr 段的虛擬內(nèi)存啟始地址

5.vmsize 段的虛擬內(nèi)存大小

6.fileoff 段在文件中的偏移量

7.filesize 段在文件中的大小

8.maxprot 段頁面所需要的最高內(nèi)存保護(hù)(4=r,2=w,1=x)

9.initprot 段頁面初始的內(nèi)存保護(hù)

10.nsects 段中包含section的數(shù)量

11.flags 其他雜項(xiàng)標(biāo)志位

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锄列,隨后出現(xiàn)的幾起案子图云,更是在濱河造成了極大的恐慌,老刑警劉巖邻邮,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竣况,死亡現(xiàn)場離奇詭異,居然都是意外死亡筒严,警方通過查閱死者的電腦和手機(jī)帕翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萝风,“玉大人,你說我怎么就攤上這事紫岩」娑瑁” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵泉蝌,是天一觀的道長歇万。 經(jīng)常有香客問我,道長勋陪,這世上最難降的妖魔是什么贪磺? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮诅愚,結(jié)果婚禮上寒锚,老公的妹妹穿的比我還像新娘。我一直安慰自己违孝,他們只是感情好刹前,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雌桑,像睡著了一般喇喉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上校坑,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天拣技,我揣著相機(jī)與錄音千诬,去河邊找鬼。 笑死膏斤,一個(gè)胖子當(dāng)著我的面吹牛徐绑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掸绞,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼泵三,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了衔掸?” 一聲冷哼從身側(cè)響起烫幕,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敞映,沒想到半個(gè)月后较曼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡振愿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年捷犹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冕末。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萍歉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出档桃,到底是詐尸還是另有隱情枪孩,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布藻肄,位于F島的核電站蔑舞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嘹屯。R本人自食惡果不足惜攻询,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望州弟。 院中可真熱鬧钧栖,春花似錦、人聲如沸婆翔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浙滤。三九已至阴挣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纺腊,已是汗流浹背畔咧。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工茎芭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人誓沸。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓梅桩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拜隧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宿百,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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