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

2021-09-12 23:45:55 字數 2574 閱讀 4846

題目自擬,內容圍繞系統呼叫進行;

部落格中需要使用實驗截圖

部落格內容中需要仔細分析系統呼叫、保護現場與恢復現場、系統呼叫號及引數傳遞過程

總結部分需要闡明自己對系統呼叫工作機制的理解

實驗環境:ubuntu 16.0.4 + vmware workstation pro 14

如圖所示,可以看到已經編譯完成,將./linux-5.0.1/arch/x86/boot/bzimage拷貝至當前資料夾備用。

qemu-system-i386 -kernel linux-5.0.2arch/x86/boot/bzimage -initrd rootfs.img

啟動執行成功

然後新建乙個terminal終端,啟動gdb進行除錯,並設定斷點

start_kernel函式作為核心的入口函式,定義在init/main.c檔案中。它主要是初始化系統相關的內容,以便系統進入一種服務狀態,提供各種api呼叫的服務。至此,使用ubuntu編譯linux核心5.0以及使用gdb跟蹤除錯核心基本成功。

因為學號後兩位為84,首先通過查詢/usr/include/asm/unistd_32.h檔案獲取與學號對應的系統呼叫號及其所對應的函式,為oldlstat函式。

oldlstat主要包含stat、fstat、lstat,主要用於獲取檔案的狀態。stat和lstat是兄弟函式,都是用於獲取檔案資訊,使用過程中需要使用標頭檔案

#include

#include

#include

int

stat

(int argc,

const

char

*ar**)

printf

("the file is:%d\n",(

int)st.st_size);if

((st.st_mode & s_ifmt)

== s_ifdir)

//s_ifmt 可判斷其他型別 else if 並列判斷

return0;

}

並在main函式中宣告

menuconfig

("stat"

,"show file"

,stat)

;

按照如上的操作步驟,重新編譯linux核心,並且重新準備根檔案系統,如下所示:

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

cd …/rootfs/

cp …/menu/init ./

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

再次執行menuos,檢視執行效果:

使用gdb除錯,跟蹤creat系統呼叫

系統呼叫:

作業系統為使用者態程序與硬體裝置進行互動提供的一組介面——系統呼叫。計算機系統的各種硬體資源是有限的,在現代多工作業系統上同一時候執行的多個程序都須防問這些資源,為了更好的管理這些資源程序是不同意直接操作的,全部對這些資源的訪問都必須有作業系統控制。也就是說作業系統是使用這些資源的唯一入口,而這個入口就是作業系統提供的系統呼叫(system call)。在linux中系統呼叫是使用者空間訪問核心的唯一手段,除異常和陷入外,他們是核心唯一的合法入口。

系統呼叫的意義:

舉例跟蹤分析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系統呼叫處理過程

學號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 缺少的依賴 安...

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

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