
前言 :
- 上一節(jié)學(xué)習(xí)了Mach-O 文件,對(duì)Mach-O有個(gè)大致的了解,今天來(lái)學(xué)習(xí)
Mach-O可執(zhí)行文件的生成過(guò)程 :編譯與鏈接。
知識(shí)參考:
Mach-O文件生成過(guò)程
鏈接的本質(zhì) : 就是把多個(gè)?標(biāo)?件組合成?個(gè)?件(Mach-O可執(zhí)行文件)
目標(biāo)文件 :通常.o文件被我們稱之為目標(biāo)文件;
1. 目標(biāo)文件的生成過(guò)程:

大概步驟:
- 將代碼匯編化
- 將符號(hào)進(jìn)行歸類;此時(shí)地址還沒(méi)有虛擬化(沒(méi)有生成虛擬內(nèi)存地址)。對(duì)于外部導(dǎo)入符號(hào),它的調(diào)用地址無(wú)法得知,需要將其放到重定位符號(hào)表中
- 生成一個(gè)或多個(gè)
.o目標(biāo)文件- 此時(shí)鏈接器(
llvm-ld)并沒(méi)有被執(zhí)?
2 . ?成Mach-O可執(zhí)行文件的過(guò)程:

- 多個(gè)目標(biāo)文件合并
- 符號(hào)表(包括重定位符號(hào)表)合并成一張表
- 生成一個(gè)
Mach-O可執(zhí)行文件
靜態(tài)鏈接
- 代碼經(jīng)過(guò)編譯鏈接最后分配虛擬內(nèi)存地址生成可執(zhí)行文件或動(dòng)態(tài)庫(kù)

動(dòng)態(tài)鏈接:
- 在運(yùn)行時(shí),由
dyld動(dòng)態(tài)加載
靜態(tài)/動(dòng)態(tài)鏈接

image
總結(jié)
-
編譯本質(zhì):將代碼匯編化,并將符號(hào)進(jìn)行歸類。外部導(dǎo)入符號(hào),放到重定位符號(hào)表。生成一個(gè)或多個(gè).o目標(biāo)文件 -
鏈接本質(zhì):多個(gè)目標(biāo)文件合并,符號(hào)表(包括重定位符號(hào)表)合并成一張表,生成一個(gè)Mach-O可執(zhí)行文件