從調試的角度來看,使用GAS的好處是可以在生成的目標代碼中包含壹個符號表,這樣就可以使用GDB和DDD進行源代碼級的調試。要在生成的可執行程序中包含符號表,可以通過以下方式進行編譯和鏈接:
[xiaowp @ Gary code]$ as-gstabs-o hello . o hello . s
[小p@gary碼]$ ld -o hello hello.o
執行as命令時帶參數- gstabs可以告訴匯編器在生成的目標代碼中添加壹個符號表,同時需要註意的是,在與ld命令鏈接時不能添加-s參數,否則鏈接時會刪除目標代碼中的符號表。
匯編程序員通常面臨壹些惡劣的軟硬件環境,短ALD可能更符合實際需要,所以下面主要介紹如何用ALD調試匯編程序。首先,在命令行模式下執行ald命令來啟動調試器。該命令的參數是要調試的可執行程序:
[xiaowp@gary doc]$ ald妳好
匯編語言調試器0.1.3版權所有
地獄精靈Intel 80386 (32位),LSB,可執行,版本1(當前)
加載調試符號...(加載了15個符號)
ald & gt
當ALD提示符出現時,使用反匯編命令反匯編代碼段:
ald & gt拆卸-s .text
分解部分。文本(0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx,0xf
08048079 B998900408 mov ecx,0x8049098
0804807E BB01000000 mov ebx,0x1
08048083 B804000000 mov eax,0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx,0x0
0804808 f b 80100000 mov eax,0x1
08048094 CD80 int 0x80
上面輸出信息的第壹列是指令對應的地址碼,可以用來設置程序執行時的斷點:
ald & gt中斷0x08048088
為0x08048088設置了斷點1
設置斷點後,使用run命令開始執行程序。ALD會在遇到斷點時自動暫停程序,並顯示所有寄存器的當前值:
ald & gt奔跑
啟動程序:妳好
在0x08048088處遇到斷點1
eax = 0x 000000004 ebx = 0x 00000001 ecx = 0x 08049098 EDX = 0x 0000000 fesp = 0x bffff 6 c 0 ebp = 0x 00000000 ESI = 0x 00000000 EDI = 0x 0000000
ds = 0x 00000002 b es = 0x 00000002 b fs = 0x 00000000 GS = 0x 00000000
ss = 0x 00000002 b cs = 0x 00000023 EIP = 0x 08048088 e flags = 0x 00000246
旗幟:PF ZF IF
08048088 CD80 int 0x80
如果需要單步調試匯編代碼,可以使用下壹個命令:
ald & gt然後
妳好,世界!
eax = 0x 00000000 f ebx = 0x 00000000 ecx = 0x 08049098 EDX = 0x 0000000 fesp = 0x bffff 6 c 0 ebp = 0x 00000000 ESI = 0x 00000000 EDI = 0x 0000000
ds = 0x 00000002 b es = 0x 00000002 b fs = 0x 00000000 GS = 0x 00000000
ss = 0x 00000002 b cs = 0x 00000023 EIP = 0x 0804808 f e flags = 0x 00000346
標誌:PF ZF TF IF
0804808 f b 80100000 mov eax,0x1
有關ALD支持的所有調試命令的詳細列表,您可以使用help命令:
ald & gt幫助
命令可以縮寫。
如果輸入空白命令,則重復最後壹個命令。
鍵入“help & ltcommand & gt',以了解有關& ltcommand & gt。
通用命令
連接清除繼續分離拆解
輸入檢查文件幫助加載
下壹次退出寄存器運行設置
分步卸載窗口寫入
斷點相關命令
中斷刪除禁用啟用忽略
l斷路器t斷路器