2017-08-18 100 views
-1

我正在編寫一個OS程序集(引導程序和內核),我正在使用QEMU調試它。
我想設置一些調試斷點來暫停執行,並在執行時只執行一條指令(單步)。我還想在運行時讀取和設置寄存器和內存內容。我讀到了這樣做的一個方法是使用GDB。問題是我在搜索它之前和之後沒有使用過GDB我意識到GDB在目標文件中使用由C編譯器(gcc)調用的標籤,不是嗎?但正如我所說我正在彙編(使用NASM),我有一個純粹的原始二進制文件,所以如何做到這一點?以另一種方式存在嗎?也許我可以創建自己的GDB服務器或類似的東西?Qemu調試程序集內核

+0

gdb可以使用原始地址。請參閱幫助或手冊。此外,沒有什麼能阻止你用調試信息構建你的asm代碼,所以你可以使用標籤和行號。 – Jester

+0

你可以用調試信息編譯你的程序集文件(選項取決於彙編程序,但是使用NASM你可以使用-g -F dwarf)。您可以編譯帶有調試信息的_C/C++ _(GCC是'-g'選項)。您使用鏈接器創建ELF文件(此ELF文件包含調試信息)。如果您不使用GRUB並編寫自己的引導加載程序,那麼您需要使用諸如「objcopy」之類的東西將ELF exectuable轉換爲二進制文件。 –

+0

如果您使用NASM生成二進制文件而不是ELF,則必須重新構建生成的方式,因爲NASM不支持用'-f bin'選項進行調試。 –

回答

0

我意識到,GDB使用C編譯器(GCC)的目標文件

在puted標籤GDB沒有做到這一點當標籤可用。否則,GDB將顯示原始地址。

即使有其他「標籤」可用,也不會阻止您在原始地址上設置斷點。