ORIGINAL POST : https://sst.st/p/602
因为自己的疏忽所以错过了博客园的提交时间,弄得整个后续都十分尴尬。
P1
输入指令,注意十六进制数字在debug中不要带H
r 指令看一下当前CS和IP的位置
t 指令单步执行
如果执行到最后一句指令后继续执行,执行到的指令就不是自己写的了。
u 指令可以看一下反汇编指令,与书上记载相同。
P2
写代码,写代码
调CS、IP
t t t t t t t t t
得到结果,AX=0100H
P3
d 指令(dump) 显示内存中的数据
准确一点
这里应该是DOSBOX套了一层壳的缘故,看不到实际正确的日期。
尝试修改,然而即使修改了也没什么用,再次查询数据的时候还是原来的数据。
此处,如果不是在DOSBOX下运行,应该是可以修改的[未验证]。原因为
- Windows 下的 cmd 看到的是被映射到 RAM 区的内容,所以可能被修改
- 在x86模式下,每个DOS虚拟机都会获得一份BIOS的拷贝。它只是一个位于虚拟内存中的拷贝,跟真实的BIOS一点关系都没有
- 如果是实dos模式下,会出现不让修改的结果
P4
此处修改的内存属于显存地址。
b800:0000 这段内存 是显存部分,你在这段内存中写东西会直接反映在屏幕中,所以你会看到屏幕中一些变化,但是当你不再改变它时候,会别其他的数据覆盖掉,因为你每回一次车,屏幕要上滚,实际就是在往显存中写东西,你以前的东西就会被覆盖掉了.
之所以会在DOS界面的第二行出现彩色字符,是因为
- b8100H这块单元里存放的是显存的数据.
- b8100H这个具体地址对应的位置是我们DOS窗口第二行的大概中间的位置.
- b8100H这个单元里,用16位内存单元来存储要显示的信息,第一个8位存字符的ASCII码,第二个8位存字符的颜色.
所以我们用-e 来修改,输入 01 01 时,第一个01 会看到字符改变了,第二个01会 看到刚才改变的字符的颜色变了。
这个实验,感觉-e b810 后直接回车修改会有更好的体验
SUMMARY
熟悉了一下debug的基本操作。感觉这个调试器是真的不怎么好用……