一、預(yù)備知識(shí):Debug 的使用
(1). 什么是 Debug贸桶?
Debug 是 DOS舅逸、Windows 都提供的實(shí)模式(8086 方式)程序的調(diào)試工具。使用它皇筛,可以查看 CPU 各種寄存器中的內(nèi)容琉历、內(nèi)存的情況和在機(jī)器碼級(jí)跟蹤程序的運(yùn)行。
(2). 我們用到的 Debug 功能
- 用 Debug 的 R 命令查看水醋、改變CPU寄存器的內(nèi)容
- 用 Debug 的 D 命令查看內(nèi)存中的內(nèi)容
- 用 Debug 的 E 命令改寫內(nèi)存中的內(nèi)容
- 用 Debug 的 U 命令將內(nèi)存中的機(jī)器指令翻譯成匯編指令
- 用 Debug 的 T 命令執(zhí)行一條機(jī)器指令
- 用 Debug 的 A 命令以匯編指令的格式在內(nèi)存中寫入一條機(jī)器指令
- 用 Debug 的 Q 命令可以退出 Debug
關(guān)于在 Windows 中使用 Debug旗笔,請(qǐng)看我的上一篇文章:
64 位 Windows 下配置匯編用的 Debug 環(huán)境(win7和win10都適用
(3). 命令的使用
- R 命令
功能:
使用 R 命令查看、改變CPU寄存器的內(nèi)容
-
進(jìn)入 Debug
進(jìn)入 Debug -
使用 R 命令查看 CPU 中各個(gè)寄存器中的內(nèi)容
使用 R 命令查看 CPU 中各個(gè)寄存器中的內(nèi)容
- 使用 R 命令修改寄存器的內(nèi)容
用法:
r 寄存器名稱
- D 命令
功能:
使用 D 命令查看內(nèi)存中的內(nèi)容
用法:(默認(rèn)查看 128 個(gè)內(nèi)存單元的內(nèi)容)
d 段地址:偏移地址
或指定查看范圍:
d 段地址:起始偏移地址 結(jié)尾偏移地址
- E 命令
功能:
使用 E 命令改寫內(nèi)存中的內(nèi)容(也可視為寫入機(jī)器指令)
用法一:
e 段地址:起始偏移地址 數(shù)據(jù) 數(shù)據(jù) 數(shù)據(jù) ······
用法二:(以提問的方式來逐個(gè)地修改從某一地址開始的內(nèi)存單元中的內(nèi)容拄踪,以從 073f:10 單元開始為例)
1. 輸入 e 073f:10蝇恶,按 Enter 鍵
2. 在光標(biāo)的 . 后面輸入想要寫入的數(shù)據(jù)(輸入數(shù)據(jù)然后按空格;單單按空格則視為不修改惶桐,跳到下一單元)
3. 希望修改的內(nèi)存單元改寫完畢后撮弧,按 Enter 鍵潘懊,E 命令操作結(jié)束
- U 命令
功能:
使用 U 命令查看內(nèi)存中機(jī)器碼的含義(將內(nèi)存中的機(jī)器指令翻譯成匯編指令)
用法:
u 段地址:偏移地址
- 先用 E 命令向內(nèi)存中寫入機(jī)器指令,再用 U 命令將內(nèi)存單元中的內(nèi)容翻譯為匯編指令
機(jī)器指令??????????對(duì)應(yīng)的匯編指令
b80100?????????????mov ax, 0001
b90200?????????????mov cx, 0002
01c8?????????????????add ax, cx
- T 命令
功能:
使用 T 命令執(zhí)行 CS:IP 指向的機(jī)器指令
- A 命令
功能:
使用 A 命令以匯編指令的格式在內(nèi)存中寫入一條機(jī)器指令
前面使用了 E 命令寫入機(jī)器指令贿衍,這樣寫起來很不方便授舟,也不直觀,最好能直接以匯編指令的形式寫入指令舌厨。
二岂却、實(shí)驗(yàn)任務(wù)
1. 將下面三條指令寫入從 2000:0 開始的內(nèi)存單元中,利用這三條指令計(jì)算 2 的 3 次方
mov ax, 1
add ax, ax
jmp 2000:0003
2. 查看主板內(nèi)存中的內(nèi)容
PC 機(jī)主板上的 ROM 中寫有一個(gè)生產(chǎn)日期裙椭,在內(nèi)存 FFF00H~FFFFFH 的某幾個(gè)單元中躏哩,請(qǐng)找出這個(gè)日期并試圖改變它。
PC 機(jī)主板上的 ROM 寫的生產(chǎn)日期是:01/01/92
由于內(nèi)存 FFF00H~FFFFFH 屬于 ROM揉燃,只能讀扫尺,不能寫,所以寫入數(shù)據(jù)的操作是沒有結(jié)果的
3. 向內(nèi)存 B8100H 開始的單元中填寫數(shù)據(jù)
// 如:
e b810:0000 01 01 02 02 03 03 04 04
請(qǐng)先填寫不同的數(shù)據(jù)炊汤,觀察產(chǎn)生的現(xiàn)象正驻;再改變填寫的地址,觀察產(chǎn)生的現(xiàn)象抢腐。
可以看到屏幕出現(xiàn)了些彩色的圖案姑曙,這些是寫入的數(shù)據(jù)對(duì)應(yīng)的 ASCII 碼字符;
而 b810:0 所對(duì)應(yīng)的內(nèi)存地址是顯存地址空間(如下圖所示)迈倍,所以往顯存中寫入信息伤靠,顯卡會(huì)將它輸出到顯示器上。