0.這是什么東西?
DOSBox debugger是一款由DOSBox原作者為DOSBox量身打造的調(diào)試器,幾乎所有運(yùn)行于DOSBox上的程序都可以用它進(jìn)行調(diào)試。0.74-3版本的下載地址為http://source.dosbox.com/dosbox-74-3-debug.exe

1.為什么選擇DOSBox debugger?
不同的人可能有不同的理由,我的理由是為了學(xué)習(xí)16位和32位masm匯編。在64位操作系統(tǒng)上學(xué)習(xí)匯編有很多方式,那么為什么是dosbox及其debugger?
(1)開門見山地說吧,最重要的一點(diǎn),就是在masm-code插件的加持下,dosbox debugger可以完美地兼容于vscode
vscode,永遠(yuǎn)滴神!
(2)VS上同樣可以寫masm,而且VS自帶的調(diào)試器功能更強(qiáng)大,界面更友好,那為啥不用VS?一是因?yàn)閂S實(shí)在太大了,二是因?yàn)関scode永遠(yuǎn)滴神
三是因?yàn)閂S配置起來比較麻煩,而我比較懶
(3)emu8086?畢竟是8086,不支持32位
(4)masm for windows?本體就是個文本編輯器,主要原因是丑
眾所周知,好看的工作環(huán)境有利于提高工作效率
(5)Red asm/Visual asm/等等?別問,問就是vscode天下第一
(6)為什么不用dosbox原本的debug.exe?功能少而且難以查看32位寄存器
2.安裝
dosbox怎么裝我就不說了,網(wǎng)上一大堆。從上面那個鏈接下載了debugger之后,將其放在dosbox.exe同一個文件夾下,就基本ok了,雙擊該exe就可以打開了。
如果是使用了masm-code的vscode,那么就放在C:\Users\你的名字\AppData\Roaming\Code\User\globalStorage\kaixa.masm-code這個文件夾里,并把這個debugger的文件名改成DOSBox.exe,把原來的DOSBox.exe改成另外的名字。這樣就可以讓你在使用vscode時通過ctrl+shift+p或者F1直接啟動dosbox及其debugger
彈出dosbox窗口后,輸入debug xxxx.exe并按下回車,dosbox debugger就會開始工作了。
3.使用
這款調(diào)試器有別于現(xiàn)在的大多數(shù)高級語言調(diào)試器,鼠標(biāo)基本是完全沒用的,想要操作它必須得用鍵盤上的各種鍵或者在其里面敲命令。下面就講講幾個常用的鍵位:
單步運(yùn)行 F10
查看數(shù)據(jù)段內(nèi)存 alt+D(記得等程序?qū)?shù)據(jù)段地址傳給DS之后)
然后沒了。由于本人能力所限,目前常用的就這兩條。當(dāng)然,還是把其他的鍵或指令都展示一下:
F3 / F6-歷史記錄中的上一個命令。
F4 / F7-歷史中的下一個命令。
F5-運(yùn)行。
F9-設(shè)置/刪除斷點(diǎn)。
F10 / F11-跨步/追溯到指令。
ALT + D / E / S / X / B-將數(shù)據(jù)視圖設(shè)置為DS:SI / ES:DI / SS:SP / DS:DX / ES:BX。
esc-清除輸入行。
上/下-移動代碼視圖光標(biāo)。
Page Up / Down-滾動數(shù)據(jù)視圖。
Home / End-滾動日志消息。
BP [段]:[偏移]-設(shè)置斷點(diǎn)。
BPINT [intNr] *-設(shè)置中斷斷點(diǎn)。
BPINT [intNr] [ah] *-用ah設(shè)置中斷斷點(diǎn)。
BPINT [intNr] [ah] [al]-使用ah和al設(shè)置中斷斷點(diǎn)。
BPM [段]:[偏移量]-設(shè)置內(nèi)存斷點(diǎn)(內(nèi)存更改)。
BPPM [選擇器]:[偏移量]-設(shè)置pmode內(nèi)存斷點(diǎn)(內(nèi)存更改)。
BPLM [線性地址]-設(shè)置線性內(nèi)存斷點(diǎn)(內(nèi)存更改)。
BPLIST-列出斷點(diǎn)。
BPDEL [bpNr] / *-刪除斷點(diǎn)nr /全部。
C / D [段]:[偏移量]-設(shè)置代碼/數(shù)據(jù)視圖地址。
DOS MCBS-顯示內(nèi)存控制塊鏈。
INT [nr] / INTT [nr]-執(zhí)行/跟蹤到中斷。
LOG [num]-寫入cpu日志文件。
LOGS / LOGL [num]-寫入長/短的cpu日志文件。
HEAVYLOG-在dosbox退出時啟用/禁用自動cpu日志。
ZEROPROTECT-啟用/禁用零代碼執(zhí)行檢測。
SR [reg] [value]-設(shè)置寄存器值
SM [seg]:[off] [val] [。] ..-用以下值設(shè)置存儲器。
IV [seg]:[off] [name]-為內(nèi)存地址創(chuàng)建var名稱。
SV [filename]-將var列表保存在文件中。
LV [filename]-從文件加載var列表。
ADDLOG [消息]-將消息添加到日志文件。
MEMDUMP [seg]:[off] [len]-將內(nèi)存寫入文件memdump.txt。
MEMDUMPBIN :[o] [len]-將內(nèi)存寫入文件memdump.bin。
SELINFO [segName]-顯示選擇器信息。
INTVEC [文件名]-將中斷向量表寫入文件。
INTHAND [intNum]-將代碼視圖設(shè)置為中斷處理程序。
CPU-顯示CPU狀態(tài)信息。
GDT-列出GDT的描述符。
LDT-列出LDT的描述符。
IDT-列出IDT的描述符。
PAGING [頁面]-顯示頁面表的內(nèi)容。
EXTEND-切換其他信息。
TIMERIRQ-運(yùn)行系統(tǒng)計時器。
HELP-幫助
來源:https://www.vogons.org/viewtopic.php?t=3944
4.結(jié)語
其實(shí)也沒啥好說的,這個debugger還是比較傻瓜的。
當(dāng)然,感謝dosbox及其debugger的作者,感謝我的舍友Wgagaxnunigo讓我知道了這款強(qiáng)大的調(diào)試器,感謝masm-code的作者kaixa,感謝我在vscode上寫匯編的引路人wz大佬(有空可以去看看她的關(guān)于vscode配置masm環(huán)境的文章https://zhuanlan.zhihu.com/p/105268949)
由于本人水平所限,此片文章中可能存在一些錯誤或繁瑣之處,還望各路大佬多多指教。