nasm彙編以及bochs除錯

FreeeLinux發表於2017-03-15

先說下編譯的命令:

編譯:

nasm -f elf hello.asm -o hello.o

加許可權:

chmod +x hello.o

連結:

ld -m elf_i386 -s -o hello hello.o

直接執行就可以了。

bochs下除錯com檔案方法:
方法一:在你的程式 LABEL_BEGIN後面緊接著寫一個jmp $(讓程式碼死迴圈在這個位置),然後編譯為com檔案。寫入虛擬軟盤。
之後啟動除錯模式的bochs,先不要設定任何斷點,直接執行到dos介面。然後在dos中執行你的程式,出現假死狀態(必然的,程式一開始就會死迴圈)。
然後切換到bochs的命令列視窗,估計需要先按ctrl+c,然後輸入r命令,察看當前eip暫存器的值。例如當前值為0x124,那麼就輸入下面的命令,set \$eip=0x126,就是讓EIP增大2即可,JMP \$的機器碼要佔這麼個大小。之後,就可以單步跟蹤執行了

方法二:先在bochs的配置檔案中加入一句話”magic_break: enabled=1”,這句話的作用就是bochs啟動時開啟魔術斷點除錯功能,然後在程式開始處新增一句xchg bx,bx。
將com檔案複製到虛擬軟盤pm.img中,啟動bochs在freedos中執行com檔案,當執行到xchg bx,bx指令時就會自動斷到Bochsdbg裡。

bochs除錯參考bochs 除錯 com 檔案

相關文章