致謝學號末位:186
跟蹤分析linux核心5.0系統呼叫處理過程
選擇系統呼叫號後兩位與學號後兩位相同的系統呼叫進行跟蹤分析
分析系統呼叫、保護現場與恢復現場、系統呼叫號及引數傳遞過程
配置核心編譯引數:
編譯核心
製作根檔案系統;
mkdir ~/linuxkernel啟動menuos: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
跟蹤除錯核心啟動
建立與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 ...