Windows7 Debug Test
eryar@163.com
1.Introduction
在郁大師的影響下,很早之前買了本王爽老師的《匯編語(yǔ)言》,可惜一直閑置,今天終于得空,可以學(xué)習(xí)起來(lái)了。為了使學(xué)習(xí)效果更好,還是寫點(diǎn)東西記錄下來(lái),一方面鞏固下知識(shí)點(diǎn),一方面起到一個(gè)監(jiān)督作用。
畢竟不是計(jì)算機(jī)專業(yè)科班出身,這些計(jì)算機(jī)基礎(chǔ)知識(shí)只有靠自學(xué)。意識(shí)到匯編的重要性是從大師可以反匯編和逆向一些軟件開始的。匯編在Debug的過程中也有重要作用,如在Debug時(shí)看到這種界面,總是有想理解其意義的好奇心:
Figure 1. Disassembly and Registers in Visual Studio
通過反匯編代碼,對(duì)程序的運(yùn)行情況更加清晰。學(xué)習(xí)匯編的兩個(gè)目的:充分獲得底層編程的體驗(yàn),深刻理解機(jī)器運(yùn)行程序的機(jī)理。知道了來(lái)朧去脈,在應(yīng)用的過程中才能更加自信。
本文主要介紹在Windows7中運(yùn)行debug,并在debug程序中執(zhí)行匯編代碼,從而方便理論知識(shí)的學(xué)習(xí)。
2.Run Debug in Windows7
Debug是DOS, Windows提供的實(shí)模式(8086)程序的調(diào)試工具,使用它可以查看CPU各種寄存器、內(nèi)存情況和在機(jī)器碼級(jí)跟蹤程序的運(yùn)行。因?yàn)閐ebug程序是16位的,在64位的Windows7中無(wú)法運(yùn)行,所以根據(jù)網(wǎng)上的方法,先安裝一個(gè)DOS模擬環(huán)境,再運(yùn)行debug。
分別下載工具DOS BOX和32位機(jī)器上的debug,這里給出DOSBOX和MASM,其中Debug包含在MASM中。
Figure 2. DOSBox for Debug
安裝好DOSBox后,將MASM放到D盤中,運(yùn)行如下命令來(lái)運(yùn)行Debug:
mount c d:\MASM
c:
debug
-r
就可以顯示CPU中的相關(guān)信息,如下圖所示:
Figure 3. Debug in DOSBox
Debug的命令比較多,下面簡(jiǎn)單介紹幾個(gè)常用的:
v R命令:查看、修改CPU寄存器的內(nèi)容;
v D命令:查看內(nèi)存中的內(nèi)容;
v A命令:以匯編指令的格式在內(nèi)存中寫入一條機(jī)器指令;
v T命令:執(zhí)行一條機(jī)器指令;
2.1 R命令
CPU的寄存器有AX,BX,CX,DX,CS,IP等,通過R命令,可以查看這些寄存器中的信息。若要修改一個(gè)寄存器的值,比如AX中的值,可用R命令后加寄存器名來(lái)進(jìn)行,輸入r ax后回車,在:提示后輸入一個(gè)數(shù)值即可。
Figure 4. Modify AX by R command
可以采用同樣的方式來(lái)修改其他寄存器中的內(nèi)容,如IP,CS等。
2.2 D命令
Debug的D命令可以查看內(nèi)存中的內(nèi)容,直接輸入D命令后,會(huì)給出默認(rèn)內(nèi)存地址的信息,如下圖所示:
Figure 5. D command
也可以用“d 段地址:偏移地址”來(lái)列出指定內(nèi)存單元中的信息,如下圖所示:
Figure 6. D command
2.3 A命令
Debug的A命令以匯編指令形式在內(nèi)存中寫入機(jī)器指令。這樣就可以方便測(cè)試匯編代碼的效果。如下圖所示向1000:0中寫入?yún)R編指令:
Figure 7. Write Assembly Code by A Command
如上圖所示,在A命令后跟上地址,然后就可以向相應(yīng)地址中寫入?yún)R編指令。再用D命令查看內(nèi)存時(shí),就可以看到相應(yīng)的機(jī)器碼。有了匯編代碼,如何運(yùn)行呢?需要用到T命令。
2.4 T命令
T命令用于執(zhí)行CS:IP指向的內(nèi)存單元處的指令。所以要執(zhí)行A命令寫的匯編指令,需要先通過R命令修改CS和IP寄存器的內(nèi)容,使他們指向A命令匯編指令所在的內(nèi)存地址。如上圖所示的A命令是將匯編指令寫到1000:0處,所以修改CS和IP使他們指向這個(gè)地址:
Figure 8. Modify CS & IP by R command
上圖所示為修改CS和IP后,通過R命令顯示出結(jié)果。修改CS和IP后,就可以運(yùn)行T命令來(lái)執(zhí)行我們寫入的指令了。
Figure 8. Run T command
運(yùn)行一次T命令后,就執(zhí)行了一條匯編指令,這里執(zhí)行了mov ax,1,執(zhí)行后CS:IP指向了下條指令的地址,這樣再執(zhí)行一次T命令,就執(zhí)行了mov bx,2,如下圖所示:
Figure 9. Run T Command
運(yùn)行T命令后,執(zhí)行了mov bx,2,將BX中的內(nèi)容改為2了。
3.Conclusion
學(xué)習(xí)匯編語(yǔ)言,對(duì)理解程序的運(yùn)行機(jī)理有個(gè)清晰認(rèn)識(shí),是想從事計(jì)算機(jī)科學(xué)方面工作的必不可少的基礎(chǔ)。
通過安裝DOSBox從而在Windows7中運(yùn)行debug。并通過debug的幾個(gè)命令來(lái)熟悉簡(jiǎn)單的匯編指令。最后通過A,R和T命令,在debug中運(yùn)行匯編指令。
4.References
1. 王爽. 匯編語(yǔ)言. 清華大學(xué)出版社. 2013
Dowload DOSBox & MASM