因为自己的疏忽所以错过了博客园的提交时间,弄得整个后续都十分尴尬。

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下运行,应该是可以修改的[未验证]。原因为

  1. Windows 下的 cmd 看到的是被映射到 RAM 区的内容,所以可能被修改
  2. 在x86模式下,每个DOS虚拟机都会获得一份BIOS的拷贝。它只是一个位于虚拟内存中的拷贝,跟真实的BIOS一点关系都没有
  3. 如果是实dos模式下,会出现不让修改的结果

P4

此处修改的内存属于显存地址。

b800:0000 这段内存 是显存部分,你在这段内存中写东西会直接反映在屏幕中,所以你会看到屏幕中一些变化,但是当你不再改变它时候,会别其他的数据覆盖掉,因为你每回一次车,屏幕要上滚,实际就是在往显存中写东西,你以前的东西就会被覆盖掉了.

之所以会在DOS界面的第二行出现彩色字符,是因为

  1. b8100H这块单元里存放的是显存的数据.
  2. b8100H这个具体地址对应的位置是我们DOS窗口第二行的大概中间的位置.
  3. b8100H这个单元里,用16位内存单元来存储要显示的信息,第一个8位存字符的ASCII码,第二个8位存字符的颜色.

所以我们用-e 来修改,输入 01 01 时,第一个01 会看到字符改变了,第二个01会 看到刚才改变的字符的颜色变了。

这个实验,感觉-e b810 后直接回车修改会有更好的体验

SUMMARY

熟悉了一下debug的基本操作。感觉这个调试器是真的不怎么好用……

Reference

  1. https://bbs.pediy.com/thread-111893.htm
  2. http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1003&qkSg=2&qID=69786

CC BY-NC-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注