iOS強(qiáng)化 : 編譯與鏈接

前言 :
  • 上一節(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í)行文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容