原始碼可以參考: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-o
由exec_mach_imgact
處理,fat binary
由exec_fat_imgact
處理,interpreter
(直譯器)由exec_shell_imgact
處理
原始碼可以參考:bsd/kern/kern_exec.c
主要是用來對mach-o
做檢測,會檢測mach-o
頭部,解析其架構、檢查imgp
等內容,並拒絕接受dylib
和bundle
這樣的檔案,這些檔案會由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...