您想要做的事情是被禁止的,因为那将成为病毒、记录器和其他恶意软件的入口。
也就是说,如果您想让一些代码在操作系统之外运行,您应该查看系统管理模式 (SMM)。
SMM 是与标准保护模式正交的 x86 处理器的执行模式。SMM 允许 BIOS 一次完全挂起所有 CPU 上的操作系统,并进入 SMM 模式以执行一些 BIOS 服务。切换到 SMM 模式现在发生在您的 x86 机器上,因为您正在阅读此 Stackoverflow 答案。它由以下任一方式触发:
- 硬件:专用系统管理中断线 (SMI#),与 IRQ 的工作方式非常相似,
- 软件:通过 I/O 访问主板逻辑认为特殊的位置(端口 0xb2 很常见)。
SMM 服务称为 SMM 处理程序,例如传感器值通常通过 SMM 调用 SMM 处理程序来检索。
SMM 处理程序在 UEFI 固件初始化到 SMRAM 的 DXE 阶段设置,SMRAM 是专用于 SMM 处理程序的区域。见下图:
SMM 驱动程序在 DXE 阶段由 SMM 核心调度。因此可以在 DXE 阶段注册额外的 SMI 处理程序。在 DXE 阶段后期,当无法调度更多 SMM 驱动程序时,SMRAM 将被锁定(作为推荐做法)。一旦 SMRAM 被锁定,就不能调度额外的 SMM 驱动程序,因此不能注册额外的 SMI 处理程序。例如,注册 SMI 处理程序的 SMM 驱动程序不能从 EFI Shell 加载,也不能作为 DriverOption 添加到 UEFI 引导管理器中。
来源:天核
这意味着您的 SMM 处理程序的代码必须存在于 BIOS 映像中,这意味着使用添加的处理程序重建 BIOS。这很棘手,但存在提供 DXE 环境并将 SMM 处理程序代码构建到 PE 可执行文件中的工具,以及将 DXE 驱动程序添加到现有 BIOS 映像的其他工具。但并非所有 BIOS 制造商都受支持。除非您的闪存芯片在插槽中并且您可以在外部对其进行重新编程,否则这是有风险的。
但首先要检查 SMRAM 是否已锁定在您的系统上。如果幸运的话,您可以直接在 SMRAM 中添加您自己的 SMM 处理程序。这是巧妙但可行的。
注意:BIOS 中的 SMM 处理程序独立于操作系统,因此即使强盗安装了您想要的新操作系统,它也会运行。然而,在操作系统之外有很大的缺点:您需要在 SMM 处理程序中嵌入网络接口的驱动程序(仅轮询、无中断的驱动程序!)和 wlan 802.11、DHCP 和 IP 支持以连接到Wifi 并将您的数据路由到 Internet 上的外部主机。您将如何确定 wifi SSID 和密码?好吧,您可以等待操作系统为您初始化网络适配器,但您需要在调用之间保存/恢复网络主机控制器的完整状态。不是一个小或容易的项目。