Mach-O系列(二)Header和LoadCommand

##### 1.通用二進制文件

所謂的通用二進制文件遭笋,實質(zhì)上是支持的各種架構(gòu)的二進制文件打包在一起的文件坝冕,通常也稱為胖二進制文件徒探。

其共享一個header瓦呼,系統(tǒng)會根據(jù)cputype和subtype匹配合適的二進制文件,可以通過lipo來提取测暗、刪除中指定架構(gòu)部分的二進制代碼央串。由于其與單個架構(gòu)的Mach-O文件并無本質(zhì)區(qū)別,本文不對此進行深入討論碗啄。

##### 2. 64位架構(gòu)下的Mach-O

##### 3. Header

bin目錄下是可以直接運行的二進制文件质和,此處以date為例,使用MachOView打開 /bin/date稚字,其結(jié)構(gòu)如下

![Mach-O分段數(shù)據(jù)](https://upload-images.jianshu.io/upload_images/1712059-b35992843eb42874.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

首先看Header部分

![Mach-O Header](https://upload-images.jianshu.io/upload_images/1712059-1c3936cad543e04c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

文件頭一開始是一個Magic Number饲宿,在32位下值是0xFEEDFACE,64位下是0xFEEDFACF胆描,再往下是CPU Type 和 CPU SubType瘫想,其作用是確保二進制文件且可在當前架構(gòu)下運行。繼續(xù)往下是filetype昌讲,也就是Mach-O的文件類型国夜,根據(jù)apple官方文件的定義,共有以下幾種

繼續(xù)往下短绸,來到Number of Load Commands车吹,和 Size of Load Commands,其提供了加載器加載命令所需的條數(shù)和大小醋闭,后面的flags則是動態(tài)連接器(dyld)的標志窄驹,最后的保留位是64位獨有,供未來使用证逻。

##### 3. Load Commands(加載命令)

Header之后緊接著的是Load Command乐埠,如下

![Load Commands分段](https://upload-images.jianshu.io/upload_images/1712059-906bf65309c658fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

以_TEXT為例

![_TEXT](https://upload-images.jianshu.io/upload_images/1712059-aa6d7c42f11652aa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![image.png](https://upload-images.jianshu.io/upload_images/1712059-a4d37d1e0d1c23c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

其第一個參數(shù)是Command,為Load Commands的類型瑟曲,其值為LC_SEGMENT_64饮戳,該參數(shù)的作用是用于將文件中的段映射到進程的地址空間中。

##### 5.LC_SEGMENT_64/LC_SEGMENT

這是最常見的一種LoadCommand洞拨,其作用是指導內(nèi)核如何設(shè)置新運行的進程的內(nèi)存空間扯罐,在載入的時候,這些段會從Mach-O文件中載入到內(nèi)存中烦衣。每條LC_SEGMENT_64都提供了段布局所需要的必要信息:

VM Address是描述段的虛擬內(nèi)存地址歹河,

VM Size是段分配的虛擬內(nèi)存大醒谡恪;

File Offset表示段在內(nèi)存中的偏移量秸歧;

File Size表示段在文件中所占的大谐Α;

Max VM Protection為段的頁面所需要的最高內(nèi)存保護键菱,其表示方法是八進制(r=4,w=2,x=1)谬墙;

Initial Max VM Protection為段的頁面最初的內(nèi)存保護;

Number of Sections表示段中的Section的數(shù)量

flags 用于雜項

設(shè)想一下经备,有了LC_SEGMENT_64之后拭抬,程序載入內(nèi)存時,對于每個段侵蒙,只需要按照偏移量造虎,從File Offset處加載File Size大小的內(nèi)容到虛擬內(nèi)存的VM Address處,其大小為VM Size纷闺。根據(jù)Initial Max VM Protection設(shè)置了段的保護級別算凿,后面可以動態(tài)改變,前提是不大于Max VM Protection犁功。

先來看第一個_PAGEZERO氓轰,其提供了空指針陷阱機制。

_TEXT段是用于存放程序代碼的波桩,

_DATA段是用于存放程序數(shù)據(jù)

_LINKEDIT存放了連接器使用的符號表和其他表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末戒努,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子镐躲,更是在濱河造成了極大的恐慌储玫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萤皂,死亡現(xiàn)場離奇詭異撒穷,居然都是意外死亡,警方通過查閱死者的電腦和手機裆熙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門端礼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人入录,你說我怎么就攤上這事蛤奥。” “怎么了僚稿?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵凡桥,是天一觀的道長。 經(jīng)常有香客問我蚀同,道長缅刽,這世上最難降的妖魔是什么啊掏? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮衰猛,結(jié)果婚禮上迟蜜,老公的妹妹穿的比我還像新娘。我一直安慰自己啡省,他們只是感情好娜睛,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冕杠,像睡著了一般微姊。 火紅的嫁衣襯著肌膚如雪酸茴。 梳的紋絲不亂的頭發(fā)上分预,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音薪捍,去河邊找鬼笼痹。 笑死,一個胖子當著我的面吹牛酪穿,可吹牛的內(nèi)容都是我干的凳干。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼被济,長吁一口氣:“原來是場噩夢啊……” “哼救赐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起只磷,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤经磅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钮追,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预厌,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年元媚,在試婚紗的時候發(fā)現(xiàn)自己被綠了轧叽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡刊棕,死狀恐怖炭晒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情甥角,我是刑警寧澤网严,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站蜈膨,受9級特大地震影響屿笼,放射性物質(zhì)發(fā)生泄漏牺荠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一驴一、第九天 我趴在偏房一處隱蔽的房頂上張望休雌。 院中可真熱鬧,春花似錦肝断、人聲如沸杈曲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽担扑。三九已至,卻和暖如春趣钱,著一層夾襖步出監(jiān)牢的瞬間涌献,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工首有, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留燕垃,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓井联,卻偏偏與公主長得像卜壕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子烙常,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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

  • 做iOS開發(fā)的同學對這張圖片再熟悉不過了轴捎,在使用第三庫的時候,cocoapods確實給我們帶來了極大的方便蚕脏。那么侦副,...
    葉同學閱讀 790評論 3 3
  • 做iOS開發(fā)的同學對這張圖片再熟悉不過了,在使用第三庫的時候蝗锥,cocoapods確實給我們帶來了極大的方便跃洛。那么,...
    軟件iOS開發(fā)閱讀 346評論 0 0
  • 暑假期間和舍友幾個去大連玩了玩,其中很多時間都在海邊玩耍穴张,夜晚的海邊黑漆漆的细燎,只能看到幾個放著劣質(zhì)煙花的小年輕...
    冰鎮(zhèn)青提汁閱讀 130評論 0 0
  • 您好,我叫王莊皂甘。今天學習劉潤老師的課程玻驻,讓我深深的體會到了人品,也讓我深深的感動。雖然說璧瞬,今天在公司沒有分享到...
    王莊123閱讀 226評論 0 0
  • 前陣讀到關(guān)于日本企業(yè)由于管理層的經(jīng)驗主義使得企業(yè)轉(zhuǎn)型難户辫,沒落快;因而得出"經(jīng)驗是財富也是累贅"嗤锉。 今天是高考第二天...
    小丫小丫閱讀 746評論 0 0