趣探 Mach O 載入過程

2022-06-26 22:48:20 字數 1494 閱讀 1947

原始碼可以參考:bsd/kern/kern_exec.c

主要是為載入映象進行資料的初始化,以及資源相關的操作,在其內部會執行exec_activate_image(),映象載入的工作都是由它完成的

int

__mac_execve(proc_t p, struct __mac_execve_args *uap, int32_t *retval)

原始碼可以參考:bsd/kern/kern_exec.c

主要是拷貝可執行檔案到記憶體中,並根據不同的可執行檔案型別選擇不同的載入函式,所有的映象的載入要麼終止在乙個錯誤上,要麼最終完成載入映象。在os x中專門處理可執行檔案格式的程式叫execsw映象載入器

os x有三種可執行檔案,mach-oexec_mach_imgact處理,fat binaryexec_fat_imgact處理,interpreter(直譯器)由exec_shell_imgact處理

原始碼可以參考:bsd/kern/kern_exec.c

主要是用來對mach-o做檢測,會檢測mach-o頭部,解析其架構、檢查imgp等內容,並拒絕接受dylibbundle這樣的檔案,這些檔案會由dyld負責載入

然後把mach-o對映到記憶體中去,呼叫load_machfile()

原始碼可以參考:bsd/kern/mach_loader.c

load_machfile會載入mach-o中的各種load monmand命令。在其內部會禁止資料段執行,防止溢位漏洞攻擊,還會設定位址空間布局隨機化(aslr),還有一些對映的調整。

真正負責對載入命令解析的是parse_machfile()

原始碼可以參考:bsd/kern/mach_loader.c

parse_machfile會根據load_command的種類選擇不同的函式來載入,內部是乙個switch語句來實現

淺探C 程式編譯過程

通常說的編譯指由源 生成可執行檔案的過程。c 程式的編譯又可以分為幾個子過程 預處理 preprocessing 在編譯前的對源 進行文字上的預處理。輸出.i檔案。編譯 compilation 將源 轉化為彙編 輸出.s檔案。彙編 assembly 將彙編 轉化為二進位制檔案。輸出.o檔案。平時執行...

spring bean載入過程

spring通過資源載入器載入相應的xml檔案,使用讀取器讀取資源載入器中的檔案到讀取器中,在讀取過程中,解析相應的xml檔案元素,轉化為spring定義的資料結beandefinition,把相應的beandefinition註冊到登錄檔中。登錄檔中包含的beandefinition的資料結構,沒...

hw module t 載入過程

每乙個hal 模組都有乙個 id值,以這些 id值為引數來呼叫硬體抽象層提供的函式 hw get module 就可以將 指定的模組載入到記憶體來,並且獲得 乙個hw module t 介面來開啟相應的裝置。函式hw get module 實現在hardware libhardware hardwa...