Linux核心如何裝載和啟動乙個可執行程式

2022-08-30 10:54:09 字數 1214 閱讀 4385

linux核心如何裝載和啟動乙個可執行程式

沙雨濟一 、實驗目的

理解編譯鏈結的過程和elf可執行檔案格式;程式設計使用exec*庫函式載入乙個可執行檔案,動態鏈結分為可執行程式裝載時動態鏈結和執行時動態鏈結,程式設計練習動態鏈結庫的這兩種使用方式;使用gdb跟蹤分析乙個execve系統呼叫核心處理函式sys_execve ,驗證您對linux系統載入可執行程式所需處理過程的理解;特別關注新的可執行程式是從**開始執行的?為什麼execve系統呼叫返回後新的可執行程式能順利執行?對於靜態鏈結的可執行程式和動態鏈結的可執行程式execve系統呼叫返回時會有什麼不同?

二 、實驗內容

首先,進入實驗樓程式設計環境,進入linuxkernel資料夾,刪除menu,再clone乙份新的。

然後,進入menu資料夾,將test_exec.c覆蓋test.c,make rootfs。

然後,請來大小s,水平分割程式設計介面,開始進行gdb跟蹤。

接著,進行斷點的設定:sys_execve, load_elf_binary, start_thread。然後單步執行,至結束。

接著,可調出list,進行內部跟蹤,可檢視入口點位址。

三 、實驗總結

首先建立新程序,然後新程序呼叫execve()系統呼叫執行指定的elf檔案,之後再呼叫核心的入口函式sys_execve(),sys_execve()服務例程修改當前程序的執行上下文;以上系統呼叫終止後,新程序開始執行放在可執行檔案中的**,也就是執行在當前目錄下顯示檔案的功能。 當elf被load_elf_binary()裝載完成後,函式返回至do_execve()在返回至sys_execve()。elf可執行檔案的入口點取決於程式的鏈結方式,對於靜態鏈結的可執行檔案,若是靜態鏈結的,elf_entry就是指向可執行檔案裡邊規定的那個頭部,即main函式對應的位置,若這個可執行檔案是需要依賴其它動態鏈結庫的話,則elf_entry就是指向動態鏈結器的起點。

實驗七 Linux核心如何裝載和啟動乙個可執行程式

理解編譯鏈結的過程和elf可執行檔案格式 對於靜態鏈結來說,start thread中的elf entry就是可執行檔案的entry 在乙個新的可執行檔案返回到使用者態之前,要把壓入核心棧的eip修改,用新的可執行程式的起點 sys execve的內部處理過程 do open開啟檔案,載入檔案頭部 ...

作業七 Linux核心如何裝載和啟動乙個可執行程式

可執行檔案的建立 預處理 編譯和鏈結 在object檔案中有三種主要的型別。乙個可重定位 relocatable 檔案儲存著 和適當的資料,用來和其他的object檔案一起來建立乙個可執行檔案或者是乙個共享檔案。乙個可執行 executable 檔案儲存著乙個用來執行的程式 該檔案指出了exec b...

作業七 Linux核心如何裝載和啟動乙個可執行程式

可執行檔案的建立 預處理 編譯和鏈結 在object檔案中有三種主要的型別。乙個可重定位 relocatable 檔案儲存著 和適當的資料,用來和其他的object檔案一起來建立乙個可執行檔案或者是乙個共享檔案。乙個可執行 executable 檔案儲存著乙個用來執行的程式 該檔案指出了exec b...