實驗一

準(zhǔn)備工作

win10環(huán)境不自帶debug,需要自己配置。

軟件

  1. DOSBox
  2. masm 可以直接下載由參考資料1作者提供的masm工具壓縮包,里面包含必要的匯編、鏈接、調(diào)試工具,百度網(wǎng)盤下載鏈接:https://pan.baidu.com/s/1skL2bVJ,密碼:7uv1

配置

  1. 安裝軟件1,任意盤都可以
  2. 運(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,需要自己配置。

軟件

  1. DOSBox
  2. masm 可以直接下載由參考資料1作者提供的masm工具壓縮包,里面包含必要的匯編、鏈接、調(diào)試工具,百度網(wǎng)盤下載鏈接:https://pan.baidu.com/s/1skL2bVJ,密碼:7uv1

配置

  1. 安裝軟件1,任意盤都可以
  2. 運(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的部分。

參考資料

  1. Win8下用DOSBox編寫匯編語言
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容