高階作業系統實驗 1 使用gdb除錯qume

2022-02-28 03:27:54 字數 1874 閱讀 3950

檢視run指令碼

可以看到,使用的核心為: qemu-system-i386 -nographic -kernel $linux/arch/i386/boot/bzimage,使用的硬碟為:-initrd rootfs/rootfs.img.gz

如果在啟動時加「-s」可以啟動除錯模式

執行run,進入虛擬機器

./run

(退出qume虛擬機器:reboot -f)

檢視bin檔案,如下圖,可以看到,只有busybox是有效的二進位制可執行檔案,其他的都是對busybox的符號鏈結。

busybox在執行的時候,敲任何命令,結果都是在執行busybox。

退出虛擬機器,用除錯模式重新開啟

再建乙個終端操作。

建立符號鏈結cur指向ubuntu中的核心原始碼,並檢視核心根目錄。就不用把大檔案放到虛擬機器了,速度會受影響。

左邊啟動虛擬機器,等待除錯。右邊開啟gdb偵錯程式,從核心原始碼裡面讀取符號。

用gdb連線到qume虛擬機器。

把busybox可執行檔案讀進來,後面是起始位址。

加斷點,這是執行命令直譯器時候的入口。

ash_main

再加ls命令的斷點。如下圖

右側執行c,左側即開始執行

顯示當前程序的程序號

檢視當前程序是由哪個可執行檔案引發的。

繼續執行,看到964號程序又執行了命令直譯器。可見,啟動過程中,ash_main執行了兩次,在兩個程序中執行的。

用strace檢視ls執行的系統呼叫,新開乙個終端。

上面是ubuntu下執行的系統呼叫,那麼虛擬機器的呢,核心版本不一樣,故執行的系統呼叫也不一樣。

在系統呼叫的總控函式位置設定乙個斷點。b entry_sysenter_32

系統呼叫的實現函式進行跳轉的時候,看看是哪個系統呼叫,也設乙個斷點

跳轉到系統呼叫實現函式的陣列,包含的是系統呼叫實現函式的入口位址,所以只需要往前走一步,s,就會進入到相應的實現函式,可以看到,第乙個實現函式是time

繼續執行,走一步到主控函式的入口,再走一步到跳轉,再單步執行,重新回到系統呼叫實現函式。如下圖

退出除錯,先kill,再quit

作業系統實驗1

1 當生產者 消費者分別由位於同一臺計算機上的若干程序充當時,如何設計實驗?給出設計方案和linux c語言實現 重要語句加上注釋 include include include include include include include include include include defi...

作業系統實驗三 (1)

作業系統課程設計 三 1 實現乙個模擬shell 編寫三個不同的程式 cmd1.c,cmd2.c,cmd3.c,每個程式輸出一句話,分別編譯成可執行檔案cmd1,cmd2,cmd3。然後再編寫乙個程式,模擬shell程式的功能,能根據使用者輸入的字串 表示相應的命令名 去為相應的命令建立子程序並讓它...

第1課 高階作業系統

1 windows unix linux mac os android ios.2 作業系統是直接執行於硬體之上的電腦程式 作業系統的本質 3 作業系統用於管理和控制計算機的硬體和軟體資源 從使用者的角度 4 作業系統為使用者軟體的開發提供必要的服務和介面 從程式設計師的角度 1 bios 是基本輸...