ELF學習 裝載過程

2022-08-01 08:30:11 字數 527 閱讀 9429

當我們在linux bash下執行elf程式時,linux系統是怎樣裝載和執行的呢?

1.bash程序fork出子程序

2.在bash的子程序中呼叫execve系統呼叫來執行指定的elf。

3.execve系統呼叫的入口是sys_execve,在sys_execve會呼叫do_execve

4.在do_execve中會讀取可執行檔案的前128個位元組。這128個位元組用來判斷可執行檔案是哪種型別。

5.do_execve讀取了128個位元組的檔案頭後,呼叫serch_binary_handle去搜尋匹配合適的可執行檔案裝載處理過程。search_binary_handle會通過判斷檔案頭部的魔數確定檔案的格式。elf的裝載處理過程是load_elf_binary.

6.在load_elf_binary中,檢查檔案格式的有效性後,尋找動態鏈結的.interp 段。根據elf可執行檔案的program headers,建立可執行檔案和虛擬記憶體的對映。將execev系統呼叫的返回位址改成elf可執行檔案的入口位址。當execev返回時就可執行elf檔案。

Linux核心裝載ELF過程簡介

include include include int main pid t pid while 1 else if pid 0 else return 0 1.fork 函式 bash程序呼叫fork 系統呼叫建立乙個新的程序 2.execlp 函式 execlp 函式是glibc對execve ...

ELF檔案的鏈結和裝載

elf的全稱是可執行可鏈結的格式 符號表的symtab,對應的字串可以在strtab找到 重要的頭有3個elf頭 首部的固定位元組長度 程式表頭 program table header 一般緊鄰elf頭後面,節表頭 section header table 一般對於可執行檔案僅僅借助程式表頭就能想...

Java類裝載過程

包括load 裝載 link 鏈結 initializing 初始化 鏈結過程包括驗證,準備,解析 class.forname string classname 使用裝載當前類的類裝載器來裝載指定類。class.forname string classname 方法內部呼叫了class.fornam...