準備調試的nasm版的彙編代碼如下:
section .data
section .text
global main
main:
;100001/100
mov rdx,1
mov rax,86A1H
mov rbx,100
div rbx
mov rax,60
syscall
有的程序會用'_start'代替'main',但是我用_start字樣去測試時,總會出現:
輸入y之後有時程序會直接執行完推出,而我可是想單步執行並且查看寄存器狀態的呀,所以直接用'main'字眼了.
接着輸入以下命令: nasm -f elf64 -o div.0 div.asm
ld -o div div.o
它會提示一個警告,這是由於我們沒有使用'_start'字眼,直接忽略~~~~~
接着輸入gdb div 啓動gdb,輸入start開始運行該程序
如果以上操作都沒有問題的話,那麼我們就開始單步調試了.
這裏使用的命令爲ni來單步調試程序,注意有的博客輸入的命令爲n或者next,我在我個人機器發現這樣輸入會把整個程序一次跑完.
然後輸入info register命令來檢查寄存器的狀態.
這裏也可以說明,採用'main'字眼,gdb會自動爲程序設置一個臨時斷點.
接下來,我們每輸入一次ni,info register命令來單步執行程序並查看寄存器狀態.