舉例跟蹤分析Linux核心5 0系統呼叫處理過程

2021-09-12 22:14:01 字數 2196 閱讀 5272

學號274

一、編譯linux核心5.0.1

xz -d linux-5.0.1.tar.xz

tar -xvf linux-5.0.1.tar

2.編譯

make i386_defconfig

make -j8

可能會出現缺少相關依賴的問題,使用

sudo apt-get install (缺少的依賴)

安裝即可

3.製作根檔案系統

先安裝相關工具

sudo apt install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib
按如下步驟製作根檔案系統

mkdir rootfs

git clone

cd menu

gcc -pthread -o init linktable.c menu.c test.c -m32 -static

cd ../rootfs

cp ../menu/init ./

find . | cpio -o -hnewc | gzip -9 > ../rootfs.img

4.啟動核心

5.進行核心跟蹤除錯

在終端中輸入:

二、跟蹤系統呼叫

選取74號系統呼叫進行跟蹤分析

int sethostname(const char* name, size_t len)

引數name是要設定的主機名;len是name的長度;呼叫後返回0表示成功,返回-1表示失敗。

修改test.c,增加sethostname()函式,如下:

重新生成rootfs.img,並用qemu啟動核心

重新使用qemu啟動核心並進行跟蹤除錯

設定斷點1:start_kernel

斷點2:sys_sethostname

三、實驗分析

linux下的系統呼叫是通過軟中斷0x80實現的,每個系統呼叫都有相應的系統呼叫號作為唯一的標識,核心維護一張系統呼叫表sys_call_table,表中的元素是系統呼叫函式的起始位址,而系統呼叫號就是系統呼叫在呼叫表的偏移量。在x86上,系統呼叫號是通過eax暫存器傳遞給核心的。

首先,使用者程式為系統呼叫設定引數。其中乙個引數是系統呼叫編號。引數設定完成後,程式執行「系統呼叫」指令。x86系統上的軟中斷由int產生。這個指令會導致乙個異常:產生乙個事件,這個事件會致使處理器切換到核心態並跳轉到乙個新的位址,並開始執行那裡的異常處理程式。此時的異常處理程式實際上就是系統呼叫處理程式。它與硬體體系結構緊密相關。新位址的指令會儲存程式的狀態,計算出應該呼叫哪個系統呼叫,呼叫核心中實現那個系統呼叫的函式,恢復使用者程式狀態,然後將控制權返還給使用者程式。系統呼叫是裝置驅動程式中定義的函式最終被呼叫的一種方式。

舉例跟蹤分析Linux核心5 0系統呼叫處理過程

學號最後三位編號 008 使用ubuntu編譯linux核心5.0 編譯核心的過程中可能需要安裝的依賴庫 sudo apt get install libncurses5 dev libssl dev sudo apt get install build essential openssl sudo...

跟蹤分析Linux核心5 0系統86號呼叫處理過程

致謝學號末位 186 跟蹤分析linux核心5.0系統呼叫處理過程 選擇系統呼叫號後兩位與學號後兩位相同的系統呼叫進行跟蹤分析 分析系統呼叫 保護現場與恢復現場 系統呼叫號及引數傳遞過程 配置核心編譯引數 編譯核心 製作根檔案系統 mkdir linuxkernel cd linuxkernel m...

跟蹤分析Linux核心5 0系統呼叫處理過程

實驗分析 實驗總結 學號末尾三位 474 本實驗 於 2.在當前使用者目錄下建立linuxkernel資料夾 3.將linux5.0.2原始碼拷貝到linuxkernel資料夾下並解壓,之後所有的檔案操作都在該資料夾下執行 4.配置並編譯linux核心,使其具備除錯功能 命令如下 cd linux ...