gpt4 book ai didi

assembly - Hook x86 重置向量

转载 作者:行者123 更新时间:2023-12-02 21:24:31 25 4
gpt4 key购买 nike

是否可以挂接 x86 CPU 重置向量? (386+,因为对于较低的来说这是微不足道的)如果是这样,怎么办?如果不是,为什么 Linux(我见过一个发行版)在文本模式下,在与系统日志相同的终端中,在我按下重置按钮的那一刻显示大量文本?

如果可能的话,我想在我 future 的操作系统中钩住它......(比如让 RESET 触发类似于 Windows BSOD 的东西,并在实际重置之前转储内存,等等)

最佳答案

您不能直接 Hook 重置向量。它被硬连线到 CPU 中,开始执行地址 0xFFFFFFF0 处的指令。您可以做的是利用 80286 BIOS 上实现的老技巧来允许 CPU 从保护模式返回。

80286 是第一个实现保护模式的 CPU,Intel 的设计人员认为,一旦 CPU 从实模式切换到保护模式,就没有理由再切换回来。 80286 启用保护模式后返回实模式的唯一方法是重置。

然而,IBM 希望将 80286 支持的高于 1M 实模式寻址限制的附加内存提供给实模式程序。为此,他们实现了两个功能,第一个功能是可以指示键盘 Controller 重置 CPU。第二个是重置后 BIOS 会在内存中寻找特殊模式。如果找到它,它将跳过正常的初始化和引导任务,并跳转到内存中给定的地址。通过结合这两个功能,BIOS 能够提供实模式服务,使用保护模式访问 1M 以上的内存。

后来的 BIOS 实现了更好的方法来执行这些任务。例如,重置处理器的更快方法是导致三重故障,并且未记录的 LOADALL 指令可用于访问 1M 以上的内存,而无需切换到保护模式。 '386 消除了任何欺骗的需要,英特尔意识到他们的错误并允许处理器从保护模式切换到实模式而无需重置。

然而,如果重置后内存中存在特殊模式,现代 BIOS 实现仍然支持跳过初始化,因为许多应用程序都使用它。值得注意的是,80286 CPU 上的 Windows 使用它来支持运行 MS-DOS 应用程序。也许您的 Linux 计算机正在使用此功能,但也有可能您的重置按钮实际上并不是计算机上的重置按钮。

如果您想在自己的代码中利用此功能,请将您想要BIOS在重置后调用的实模式地址放入0040h:0067h中,存储16位魔数(Magic Number)0040h:0072h 中的 4321h,然后重置处理器。显然,要求键盘 Controller 进行重置在现代系统上无法可靠地工作。如果重置的不仅仅是 CPU 并导致内存被删除,那么它也无法与重置按钮一起使用。

关于assembly - Hook x86 重置向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25470971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com