GDB+Qemu調試Linux-0.11的代碼

1.下載內核源碼和根文件系統鏡像
http://oldlinux.org/Linux.old/bochs/linux-0.11-devel-040809.zip

Linux-0.11內核源碼的改進版,可以在gcc- 5.5.0下順利編譯通過,原生代碼只能在gcc-1.4下編譯:
https://github.com/yuanxinyu/Linux-0.11

2.編譯Linux-0.11
解壓Linux-0.11-master.zip,進入Linux-0.11-master目錄中,直接執行make就可以編譯內核

會生成2個文件,一個是內核Image, 一個是內核符號文件tools/system。

3.qemu啓動虛擬機
提取出linux-0.11-devel-040809.zip中的hdc-0.11.img,
按下面命令執行:

qemu-system-x86_64 -m 16 -boot a -fda Image -hda hdc-0.11.img -s -S

解釋一下

-fda Image:代表你把 Image 執行目錄下  
-hda hdc-0.11.img:代表你把 HD img,是一個模擬硬盤的文件,可以在趙博士所提供的`linux-0.11-devel-040809.zip`找到
-m:設定模擬的內存大小,本地設定爲 16MB 
-s : 服務器開啓1234端口
-S: 開始執行就掛住

另外開啓控制檯

gdb tools/system

進入客戶端
載入符號

(gdb) file tools/system

鏈接遠端服務器

(gdb) target remote localhost:1234

下中斷,停在0x7c00處

(gdb)  br *0x7c00

在此時,bios 把控制權正式的交給了 linux,而 0x7C00對應的代碼應該是 bootsect.S
觀察0x7DFE與 0x7DFF的值是否爲0x55,0xAA

(gdb) x/16xb 0x7DF0

單步執行

(gdb) si

下中斷

(gdb) b main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章