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

2021-09-12 19:10:46 字數 2747 閱讀 3312

學號最後三位編號:008

使用ubuntu編譯linux核心5.0

編譯核心的過程中可能需要安裝的依賴庫

sudo apt-get install libncurses5-dev libssl-dev

sudo apt-get install build-essential openssl

sudo apt-get install zlibc minizip

sudo apt-get install libidn11-dev libidn11

sudo apt-get install bison

sudo apt-get install flex

配置核心編譯引數(後面需要使用gdb跟蹤除錯核心)

準備根檔案系統

mkdir ~/linuxkernel

cd ~/linuxkernel/

mkdir rootfs

git clone

cd menu/

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

由於使用gcc在64位機器上編譯32位程式,加上-m32編譯選項,報了如下錯誤:

解決方法是安裝如下包即可:

sudo apt-get install libc6-dev-i386
執行 menuos:

sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu	// 建立一條軟鏈結,使用qemu指令來替換qemu-system-i386指令

qemu -kernel /usr/src/linux-5.0.1/arch/x86/boot/bzimage -initrd ../rootfs.img // 啟動qemu

使用gdb跟蹤除錯核心

另外開啟乙個shell視窗

cd /usr/src/linux-5.0.1/

gdb(gdb) file vmlinux // 在gdb介面中targe remote之前載入符號表

(gdb) target remote:1234 // 建立gdb和gdbserver之間的連線,按 c 讓qemu上的linux繼續執行

(gdb) break start_kernel // 斷點的設定可以在target remote之前,也可以在之後

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

選擇系統呼叫進行跟蹤分析

根據學號後兩位08,查表可知選擇的系統呼叫為creat

函式名稱

creat

標頭檔案#include #include #include

函式原型

int creat(const char *path, mode_t mode)

函式功能

建立檔案,顯然引數只需要(路徑path,許可權mode)。

引數說明

filename:要建立的檔名(包含路徑,預設為當前路徑) mode:建立模式(可以用數字來表示訪問許可權, 可讀、可寫、可執行 7)

函式返回值

creat的返回值為檔案描述符,由作業系統進行分配

cd ~/linuxkernel/menu/

sudo vim test.c

總結

系統呼叫(system call)

int $0x80指令

system_call()函式

系統呼叫的引數傳遞

有關creat系統呼叫的分析

舉例跟蹤分析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...

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

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