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

2021-09-12 22:21:32 字數 2952 閱讀 2173

致謝學號末位:186

跟蹤分析linux核心5.0系統呼叫處理過程

選擇系統呼叫號後兩位與學號後兩位相同的系統呼叫進行跟蹤分析

分析系統呼叫、保護現場與恢復現場、系統呼叫號及引數傳遞過程

配置核心編譯引數:

編譯核心

製作根檔案系統;

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

啟動menuos:

跟蹤除錯核心啟動

建立與qemu除錯埠的attach

開始跟蹤系統呼叫。

如圖所示,學號尾數186對應的86號系統呼叫函式為uselib:

函式int uselib(const char *library),功能是選擇要使用的二進位制函式庫

系統呼叫uselib()用於載入要使用的共享庫

通過呼叫程序。它有乙個路徑名。位址在**

在庫本身中找到要載入的。庫可以有任何

可識別的二進位制格式。

在test.c中新增**塊

對uselib在gdb中進行斷點執行

因為在斷點執行中發生了堆疊的入棧出棧,多處函式的跳轉與引用,此處僅列出部分呼叫。

相關**

syscall_define1(uselib, const char __user *, library)

;if (is_err(file))

goto out;

error = -einval;

if (!s_isreg(file_inode(file)->i_mode))

goto exit;

error = -eacces;

if (path_noexec(&file->f_path))

goto exit;

fsnotify_open(file);

error = -enoexec;

read_lock(&binfmt_lock);

list_for_each_entry(fmt, &formats, lh)

read_unlock(&binfmt_lock);

exit:

fput(file);

out:

return error;

}

實驗總結

1.系統呼叫uselib()用於載入呼叫程序要使用的共享庫。它有乙個路徑名。要載入的位址在庫本身中找到。庫可以具有任何可識別的二進位制格式。

2.uselib()是特定用於linux的,不在打算移植的程式中使用。早期libc啟動**使用uselib()載入共享庫,在二進位制檔案的名稱陣列中找到名稱。自libc 4.3.2以來,啟動**放棄嘗試在這些名稱前面加上「/usr/lib」、「/lib」和「」。在libc 4.3.4和更高版本中,這些名稱在ld_library_path中的目錄中查詢,如果沒有找到,則嘗試使用字首「/usr/lib」、「/lib」和「/」

3.系統呼叫通常通過函式進行呼叫,它們通常都需要定義乙個或幾個引數。系統呼叫通常會通過乙個long型別的返回值來表示成功或者錯誤

本文完成於2019.3.19日,謝謝**。

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

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