1

可以写入任意内存区域的实模式程序会损坏硬件吗?这种情况下不包括中断调用或其他可以在实模式下完成的事情——只是纯粹的写入内存。

这个页面显示了 x86 系统的内存映射,我看到了 BIOS 数据区之类的东西;所以我担心写入这个区域可能会对 BIOS 进行持续更改,或者至少将 BIOS 设置更改为意外值。可能更多的东西可以被摧毁。

我经常读到实模式下的硬件访问会破坏硬件;但他们没有解释必须做出的情况。

因为我只询问写访问而不调用中断,所以我的主要问题是,如果对内存的更改可以进行持久更改;如果是,是哪个,为什么?

4

1 回答 1

7

假设现代 80x86 硬件;不会导致持续变化和/或损坏的事情包括:

  • 更改计算机重置时重置的任何内容;包括 RAM、缓存、CPU 的微代码等的所有内容。

  • 写入将传统 ROM 复制到 RAM 的区域(从 0x000C0000 到 0x000FFFFF 的区域)。请注意,这实际上是 RAM,但在 POST 之后在内存控制器中设置为“忽略写入”。

  • 写入实际包含固件的区域(以 0xFFFFFFFF 结尾的“n MiB”区域)。

会导致“暂时持久的变化”(可以修复)的事情包括:

  • 将垃圾写入 CMOS 寄存器;这并不比在旧系统上使用扁平的 CMOS 电池更糟糕,并且可能会在您下次启动时导致“CMOS 设置无效”错误(由于校验和不匹配);并且可以通过修复。启动时固件的配置实用程序。

  • 丢弃存储设备(硬盘、USB 闪存等)上的数据。可以通过从备份恢复和/或重新安装软件来修复。

可能导致无法修复的持久更改的事情包括:

  • 写入固件的闪存。这通常(但不总是)涉及一个复杂的序列来解锁它,然后“猜测”一个正确的加密密钥和/或数字签名。请注意,如果您故意尝试这样做,这将非常困难,而且几乎不可能偶然发生。

  • 写入设备的闪存 ROM(如果有),可能包括硬盘的内部控制器、打印机等。这通常(但不总是)涉及防止它的保护。请注意,这也几乎不可能偶然发生。

可能造成实际物理损害的事情包括:

  • 反复敲击软盘驱动器磁头以使其停止(例如,通过寻找可能几个小时不存在的“99 柱面”)以试图减少软盘驱动器的预期寿命。

  • 试图在一些非常旧的“仅 VGA CRT”显示器上使用高分辨率视频模式(无法处理更高的频率并爆炸)。请注意,炸毁这些古老的显示器是他们唯一擅长的事情。

  • 试图在一些便宜且令人讨厌(且稀有)的笔记本电脑上设置不受支持的视频模式(例如,刷新率高于正常刷新率);在哪里可以煮沸液晶显示器中的液体。

请注意,上面的大多数事情要么需要使用保护模式或长模式(并且不能在实模式下工作),要么以某种方式涉及 IO 端口(不仅仅是内存写入)。

于 2015-10-31T01:44:23.133 回答