DOS debug.exe: 限制性内存区域?

3

(这是我的第一个问题,如有任何错误请谅解)

我在尝试使用 debug.exe 进行操作,并尝试修改存储在地址范围 FFFF:0005 到 FFFF:000C 中的 BIOS 日期。

-d FFFF:5 L 8
FFFF:0000                 30 31 2F-30 31 2F 39 32                 01/01/92

我终于弄清楚了,要移动到我想修改的地址,我必须把DS寄存器指向它,而不是像某些网站错误地声称的那样将CS寄存器指向它(例如 这里

-r DS
DS=073F
:FFFF

我发现我可以使用完整地址来修改我想要的确切内存地址。
-e FFFF:000b
FFFF:000B  39.31   32.31

但是dump命令的输出仍然没有变化!!!
-d FFFF:5 L 8
FFFF:0000                 30 31 2F-30 31 2F 39 32                 01/01/92

我怀疑可能有一些"受保护"的内存区域我无法修改,但是我找不到任何相关文档,所以想请教一下。是否有人能够解释为什么会发生这种情况以及如何解决?

谢谢。

P.S. 注意我正在使用DosBox来模拟运行,以免损坏我的计算机!(也许这就是问题所在?)


2
你正在尝试写入只读的BIOS ROM。除非重新编译DOSBox(或在现代PC上刷写新的BIOS),否则它无法更改。 - Ross Ridge
谢谢!那么我怎样才能知道哪些地址是只读的呢?我可以通过debug.exe来做到这一点吗?还是不可能的? - JohnyQ
2
在以下表格中的“ROM区域”表中,任何标记为ROM(或可能是ROM)的区域都是只读的(或可能是只读的):http://wiki.osdev.org/Memory_Map_(x86) - Ross Ridge
1个回答

2

正如评论所建议的那样,您正在写入ROM,因此那里的值不能被您的代码更改。在现代计算机上,您执行此操作将获得某种错误反馈,但在旧硬件上,写入ROM通常会被默默忽略。换句话说,CPU将执行请求的操作,但该操作对内存没有影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接