BIOS 中断,如何在 Windows 上跟踪以及如何操作它?

BIOS 中断,如何在 Windows 上跟踪以及如何操作它?

有没有办法查看引发到 Windows 的 BIOS 中断?我可以使用“debug”(cmd 命令)将中断发送到 BIOS 并跟踪一些结果吗?

答案1

硬件中断

似乎有人告诉过您,Windows NT 在 BIOS 上运行,从中您推断出中断是由 BIOS 处理的,然后“引发到 Windows”。

这完全是错误的,也是对操作系统工作方式的错误模型。除了 ACPI、系统管理模式和(对于某些显示适配器)VESA 支持之外,一旦 Windows 启动并运行,BIOS 固件基本上不参与任何事情。中断(SMM 除外)不由 BIOS 处理。它们由 Windows 的硬件抽象层处理,该层使用 APIC、IDT 和中断向量执行所有低级的诡计,这些诡计对于处理中断并将其移交给 Windows 内核是必要的。

为了跟踪 Windows NT 中中断信号的处理,需要调试内核,与内核调试器实用程序。然后可以使用调试器命令(例如、等)执行!idt操作!apic

中断指令

调用 BIOS 固件 API 中的函数——这些函数(主要但不是普遍)通过指令调用int,因此容易引起混淆“发送到 BIOS 的中断”——并跟踪它们的执行,您需要 DOS(或其他 16 位实模式操作系统)。特别是您需要一个 DOS 调试工具。您可以在真正的 DOS(如 OpenDOS 或 FreeDOS)或虚拟化的 DOS 机器(如 Windows NT 上的 NTVDM)上运行此工具。请注意,后者的虚拟 DOS 机器将影响固件功能。

您无法在 32 位 Ring 3 保护模式下调用 BIOS 固件 API 函数(这些函数要求处理器处于 16 位实模式、16 位 v8086 保护模式或 16 位 Ring 0 保护模式)。即使您有办法将机器代码映射到虚拟内存中,机器代码也无法正确执行。在 Windows NT 或 Linux 等操作系统上,从应用程序模式根本无法访问此类固件功能。(无论如何,对于此类操作系统上的应用程序来说,它实际上没什么用。)

答案2

您可能可以做到这一点,毕竟我相信 BIOS 中会不断发生中断 - 诸如键盘输入、磁盘 io 等事件,基本上所有事情。所以,我要说“是的,有办法”。

至于找到方法……有一个社区管理着他们自己的开源 bios 固件核心引导。我建议阅读他们的开发文档,并可能在 IRC 上找到他们的一些开发人员并与他们交谈。

您是否一定要在 Windows 中执行此操作?如果您只对 BIOS 感兴趣,那么使用 Linux 实用程序探索这一点可能会更好。但这超出了我目前的经验。

祝你好运。

相关内容