8

我有在操作系统旁边运行一个小服务的想法,但我不确定这是否可能。我试图通过阅读一些文档来弄清楚,但没有走远,所以我的问题来了。

我阅读了有关 UEFI 运行时服务的信息。
是否有可能在固件中有一个小模块,它在所使用的操作系统旁边运行,并将有关设备位置的信息发送到互联网上的地址?

据我所知,一旦 UEFI 将控制权交给操作系统内核,就不可能在后台运行某些东西。

为了澄清我的意图,我想在我的笔记本电脑上有类似的东西。有 Prey 项目,但它安装在操作系统中。我正在使用没有自动登录的 Linux 发行版。如果有人会窃取它,他们可能只会安装 Windows。

4

2 回答 2

2

据我所知,一旦 UEFI 将控制权交给操作系统内核,就不可能在后台运行某些东西。

我同意。当然,引导环境(之前ExitBootServices()只使用单线程模型。

据我所知,UEFI 规范中没有线程的概念。此外,每个运行时服务都是操作系统故意调用的,就像操作系统为应用程序提供系统调用一样。输入运行时系统函数后,请注意 7.1 中的以下限制:

调用者被禁止在表 30 中指定的中断之后使用来自另一个处理器或同一处理器上的某些其他服务。

根据您的运行时服务需要访问的 UEFI 固件的哪些部分,取决于您的呼叫忙时哪些固件功能是不可重入的。

也就是说,即使你准备牺牲一个线程来永久地坐在 EFI 运行时服务中,你也可以阻止整个内核的其余部分使用其他运行时服务。

不幸的是,我不认为这是可能的,但有趣的问题都是一样的!

于 2013-07-11T14:42:08.973 回答
2

您想要做的事情是被禁止的,因为那将成为病毒、记录器和其他恶意软件的入口。

也就是说,如果您想让一些代码在操作系统之外运行,您应该查看系统管理模式 (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 和密码?好吧,您可以等待操作系统为您初始化网络适配器,但您需要在调用之间保存/恢复网络主机控制器的完整状态。不是一个小或容易的项目。

于 2018-03-16T12:25:24.627 回答