exec系列函式從linux的linux_binfmt鍊錶中,通過依次呼叫每個結構的load_binary函式來選擇合適的執行格式,一旦找到就執行load_binary函式,否則嘗試下乙個linux_binfmt的load_binary
,直到嘗試完所有的linux_binfmt。
load_binary函式:
1.檢查128位的magic number,看檔案是不是屬於這個格式
2.讀取檔案的header
3.從檔案得到dynamic linker的位置
4.檢查dynamic linker是否有效
5.呼叫flush_old_exec()函式,清除被之前計算所使用的所有資源,像記憶體,頁表
6.使用do_mmap()將可執行檔案的text,data,bss段對映到程序中
7.如果可執行檔案還有其它段,也對映到程序中
8.載入dynamic linker
9.由dynamic linker將程式執行所需要的其它庫用mmap()對映到程序中
10.跳到程式的入口出開始執行程式
2009/02/15 日
exec系列函式
1.exec家族一共有六個函式,分別是 1 int execl const char path,const char arg,2 int execle const char path,const char arg,char const envp 3 int execv const char path...
exec 系列函式
本質 用新的程式代替新的程序,可以指定要執行程式的檔案exec函式如下 intexecl const char path,const char arg,path 指定路徑 相對 絕對路徑 arg 相當於命令列引數,最後加上null。intexeclp const char file,const ch...
Linux 之exec系列函式
當程序呼叫exec系列函式中的任乙個時,該程序使用者空間資源 正文 資料 堆 棧 完全由新程式替代。因為呼叫exec並不建立新程式,如果無特殊指示 程序核心資訊基本不用修改 1 execl函式宣告如下 from usr include unistd.h int execl const char pa...