準(zhǔn)備工作
win10環(huán)境不自帶debug,需要自己配置。
軟件
- DOSBox
- masm 可以直接下載由參考資料1作者提供的masm工具壓縮包,里面包含必要的匯編、鏈接、調(diào)試工具,百度網(wǎng)盤下載鏈接:https://pan.baidu.com/s/1skL2bVJ,密碼:7uv1
配置
- 安裝軟件1,任意盤都可以
- 運(yùn)行軟件1,然后輸入
mount d w:/masm //最后一個是你上面masm的解壓后的地址
d: //因為上面掛在的虛擬盤盤符規(guī)定為d,所以這里是進(jìn)入到d盤
debug //進(jìn)入到debug
實驗(1)
寫入數(shù)據(jù)用Debug的E命令。命令如下:
![題目要求寫入內(nèi)存并執(zhí)行,既然要執(zhí)行,就要寫入cs:ip指向的內(nèi)存單元,才會執(zhí)行,所以先看看cs:ip指向哪]#實驗一
@(技術(shù)博客)[匯編語言,實驗]
準(zhǔn)備工作
win10環(huán)境不自帶debug,需要自己配置。
軟件
- DOSBox
- masm 可以直接下載由參考資料1作者提供的masm工具壓縮包,里面包含必要的匯編、鏈接、調(diào)試工具,百度網(wǎng)盤下載鏈接:https://pan.baidu.com/s/1skL2bVJ,密碼:7uv1
配置
- 安裝軟件1,任意盤都可以
- 運(yùn)行軟件1,然后輸入
mount d w:/masm //最后一個是你上面masm的解壓后的地址,為了簡單我放在了w盤根目錄
d: //因為上面掛在的虛擬盤盤符規(guī)定為d,所以這里是進(jìn)入到d盤
debug //進(jìn)入到debug
實驗(1)
第一種
寫入數(shù)據(jù)用Debug的E命令,直接寫入機(jī)器碼,或者也可以寫入字符串:

題目要求寫入內(nèi)存并執(zhí)行,既然要執(zhí)行,就要寫入cs:ip指向的內(nèi)存單元,才會執(zhí)行,所以先看看cs:ip指向哪

用命令e,將地址定位當(dāng)前CS:IP指向的073F:0100,然后一次輸入機(jī)器碼。至于為什么會是00.b8這種形式,是因為00是指輸入當(dāng)時的內(nèi)存單元里存的數(shù)據(jù)

可以看到第一個t指令后,第一條匯編指令“mov ax,4e20h”已經(jīng)執(zhí)行了,接下來的是第二條“add ax,1416”。且ax也由0000變?yōu)?e20,IP也從0100變成0103。不再贅述
第二種
可以用A命令,直接寫入?yún)R編語言,形式如下

注意debug默認(rèn)16進(jìn)制,不需要再打h
(2)

先把指令輸入到指定內(nèi)存地址

把寄存器cs改為2000,使得CPU要執(zhí)行的指令指向剛才我們寫入的匯編指令

用命令t運(yùn)行,然后多運(yùn)行幾次就可以看到ax為8了
(3)

主要是要理解為什么可以把該物理地址段改成段地址+偏移地址,這里我改的是fff0:0000——fff0:00ff,也可以改成ff00:0f00——ff00:0fff

不知道是不是,寫著01/01/92,難道是1992年1月1號的,不管怎么樣,我們記住這個內(nèi)存單元地址,接下來嘗試改寫它
從上圖可知,一個點是一個存儲單元,那么第一個0的內(nèi)存地址是對應(yīng)的機(jī)器碼是30,內(nèi)存地址是FFF0:00F6

這里我嘗試改變第一個01中的1,改成2,然而再看的時候,依舊是01而不是02。大概是因為這部分是ROM的原因。只能讀不能寫
(4)

可以看到也沒有被重寫,因為這也是ROM的部分。