MachO文件

以一個簡單的iOS項目缤灵,只有NSLog輸出語句伦籍,然后編譯(最好真機器)蓝晒,將編譯后的MachO文件使用MachOView打開,分析其中內(nèi)容:

編譯后MachO--圖1

從圖1可知MachO文件簡單來區(qū)分可以分為4部分

1帖鸦、Header 頭部

? ? ? ? 用于快速確認CPU信息芝薇、文件類型等信息

2、Load Commands 加載命令

? ? ? ? 告訴loader如何設(shè)置并加載二進制數(shù)據(jù)

3作儿、Segment段(分兩部分)

? ? 3.1洛二、Section Text 代碼段(由代碼編譯成的指令集)

? ? 3.2、Section Data 數(shù)據(jù)段(含堆立倍、棧灭红、全局和靜態(tài)變量)

? ? 存放:代碼、字符常量口注、類变擒、方法等

? ? 每個segment可以有0到多個section;每個段都有虛擬地址映射到進程的地址空間

4寝志、Loader Info 鏈接信息

? ? ? ? 完整的MacO文件末端是一系列鏈接信息娇斑。其中包含了動態(tài)鏈接器用來鏈接可執(zhí)行文件或者依賴所需的符號表、字符串表等

詳細說明

一材部、Header

header截圖

從圖中可知毫缆,通過Header可以獲得CPU架構(gòu)信息、文件類型等信息

Magic Number:魔數(shù)用來確定是32位還是64位 (MH_MAGIC_64乐导,說明當(dāng)前是64位)

CPU Type:CPU類型 (本例中是arm64)

CPU Subtype:CPU子類型()

File Type:用來確定文件類型(MH_EXECUTE, 可執(zhí)行文件)

Number of Load Command:加載命令的數(shù)量苦丁,本例子中位23個加載命令(詳解2中可對應(yīng)下)

Size of Load Command:表示23個加載命令的總字節(jié)數(shù)為2888字節(jié)

Flags:表示二進制文件支持的功能,主要與系統(tǒng)的加載物臂、鏈接有關(guān)

二旺拉、Load Commands 加載命令(本例子中共23條加載命令)

loader加載

告訴loader如何設(shè)置并加載二進制數(shù)據(jù)

命令詳解

1-5、LC_SEGMENT_64(xxx) 將該段映射到進程地址空間中

6棵磷、 LC_DYLD_INFO_ONLY 加載動態(tài)鏈接庫

7蛾狗、LC_SYMTAB 載入符號表地址

8、LC_DYSYMTAB 載入動態(tài)符號表地址

9仪媒、LC_LOAD_DYLINKER 加載動態(tài)加載庫

10沉桌、LC_UUID 確定文件的唯一標識(crash文件中也會有,用來檢查crash文件與dysm文件是否匹配)

11算吩、

12留凭、LC_SOURCE_VERSION?構(gòu)建該二進制文件使用的源代碼版本

13、LC_MAIN?設(shè)置程序主線程的入口地址和棧大小

14赌莺、LC_ENCRYPTION_INFO_64?獲取加密信息

15-19冰抢、LC_LOAD_DYLIB(xxx)?加載額外的動態(tài)庫

20、LC_RPATH?Dyld維護一個稱為運行路徑列表的路徑的當(dāng)前堆棧艘狭。當(dāng)遇到@rpath時挎扰,它會被替換為運行路徑列表中的每個路徑翠订,直到找到可加載的dylib

21、LC_FUNCTION_STARTS?定義一個函數(shù)起始地址表,使調(diào)試器和其他程序易于看到一個地址是否在函數(shù)內(nèi)

22遵倦、LC_DATA_IN_CODE?定義在代碼段內(nèi)的非指令的表

23尽超、LC_CODE_SIGNATURE?獲取應(yīng)用簽名信息

說明:一、二兩部分讓kernel知道如何讀取MachO文件梧躺,并制定MachO文件的動態(tài)鏈接器用來完成后續(xù)的動態(tài)庫加載似谁,然后設(shè)置好程序的入口信息;后面的部分就相當(dāng)于run起來之后掠哥,為每一個映射到虛擬內(nèi)存中的指令操作提供真實的物理地址支持

三巩踏、Section Text代碼段

text段

從text段可以看到具體的類名、方法名等信息

data段

圖中紅色部分续搀,代表非懶加載符號表與懶加載符號表塞琼,這兩個指針表,保存著與字符串標對應(yīng)的函數(shù)指針

non lazy symbol pointer
lazy symbol pointers

dyld背后的故事&源碼分析

四:Loader Info 鏈接信息

loaderinfo

一共分四個區(qū):

1禁舷、Rebase Info: ?pointer rebase的信息

2彪杉、Binding Info:non-lazy symbol pointer綁定需要的信息

3、Lazy Binding Info:lazy symbol pointer綁定需要的信息

4牵咙、Export Info:暴露給外部的符號的信息

該部分在hook代碼中非常有用派近,根據(jù)mach-o的符號動態(tài)鏈接原理,讓non-lazy/lazy symbol 指針重新指向?qū)?yīng)的symbol stub代碼位置洁桌,起到在runtime的hook

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渴丸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子另凌,更是在濱河造成了極大的恐慌曙强,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件途茫,死亡現(xiàn)場離奇詭異,居然都是意外死亡溪食,警方通過查閱死者的電腦和手機囊卜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來错沃,“玉大人栅组,你說我怎么就攤上這事∈辔觯” “怎么了玉掸?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長醒叁。 經(jīng)常有香客問我司浪,道長泊业,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任啊易,我火速辦了婚禮吁伺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘租谈。我一直安慰自己篮奄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布割去。 她就那樣靜靜地躺著窟却,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呻逆。 梳的紋絲不亂的頭發(fā)上夸赫,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音页慷,去河邊找鬼憔足。 笑死,一個胖子當(dāng)著我的面吹牛酒繁,可吹牛的內(nèi)容都是我干的滓彰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼州袒,長吁一口氣:“原來是場噩夢啊……” “哼揭绑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郎哭,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤他匪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夸研,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邦蜜,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年亥至,在試婚紗的時候發(fā)現(xiàn)自己被綠了悼沈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡姐扮,死狀恐怖絮供,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茶敏,我是刑警寧澤壤靶,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站惊搏,受9級特大地震影響贮乳,放射性物質(zhì)發(fā)生泄漏忧换。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一塘揣、第九天 我趴在偏房一處隱蔽的房頂上張望包雀。 院中可真熱鬧,春花似錦亲铡、人聲如沸才写。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赞草。三九已至,卻和暖如春吆鹤,著一層夾襖步出監(jiān)牢的瞬間厨疙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工疑务, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沾凄,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓知允,卻偏偏與公主長得像撒蟀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子温鸽,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

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