OS旁边的UEFI运行时服务

mau*_*ufl 7 efi uefi

我有想法在操作系统旁边运行一个小服务,但我不确定它是否可行.我试着通过阅读一些文档来解决这个问题,但没有达到目标,所以这就是我的问题.

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

据我所知,我会说,一旦UEFI将控制权移交给OS内核,就不应该在后台运行一些东西.

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

Eri*_*ric 2

你想做的事情是被禁止的,因为这将成为病毒、记录器和其他恶意软件的门户。

也就是说,如果您想让一些代码在操作系统之外运行,您应该查看系统管理模式 (SMM)。

SMM 是 x86 处理器的一种与标准保护模式正交的执行模式。SMM允许BIOS一次性完全挂起所有CPU上的操作系统,并进入SMM模式来执行一些BIOS服务。当您正在阅读此 Stackoverflow 答案时,您的 x86 机器上就会立即切换到 SMM 模式。它由以下任一情况触发:

  • 硬件:专用系统管理中断线(SMI#),与 IRQ 的工作方式非常相似,
  • 软件:通过 I/O 访问主板逻辑认为特殊的位置(端口 0xb2 是常见的)。

SMM 服务称为 SMM 处理程序,例如,通常通过对 SMM 处理程序的 SMM 调用来检索传感器值。

SMM 处理程序在 UEFI 固件初始化的 DXE 阶段设置到 SMRAM(专用于 SMM 处理程序的区域)中。见下图:

平台初始化引导阶段

SMM 驱动程序由 SMM 核心在 DXE 阶段调度。因此,可以在 DXE 阶段注册其他 SMI 处理程序。在 DXE 阶段后期,当无法调度更多 SMM 驱动程序时,SMRAM 将被锁定(按照推荐做法)。一旦 SMRAM 被锁定,就不能再分派额外的 SMM 驱动程序,因此不能注册额外的 SMI 处理程序。例如,注册 SMI 处理程序的 SMM 驱动程序无法从 EFI Shell 加载,也无法在 UEFI 启动管理器中添加为 DriverOption。

来源:天诺核心

这意味着您的 SMM 处理程序的代码必须存在于 BIOS 映像中,这意味着使用添加的处理程序重建 BIOS。这很棘手,但已有工具可以提供 DXE 环境并将 SMM 处理程序代码构建到 PE 可执行文件中,以及其他工具将 DXE 驱动程序添加到现有 BIOS 映像。但并非所有 BIOS 制造商都受支持。除非您的闪存芯片位于插槽中并且您可以在外部对其进行重新编程,否则这是有风险的。

但首先要检查 SMRAM 是否已锁定在您的系统上。如果幸运的话,您可以直接在 SMRAM 中添加您自己的 SMM 处理程序。这是精确但可行的。

注意:BIOS 内的 SMM 处理程序独立于操作系统,因此即使强盗安装了新的操作系统,它也会运行,这正是您想要的。然而,在操作系统之外有巨大的缺点:您需要在 SMM 处理程序中嵌入一个网络接口驱动程序(仅轮询、无中断驱动程序!)以及 wlan 802.11、DHCP 和 IP 支持以连接到Wifi 并将您的数据路由到互联网上的外部主机。如何确定 wifi SSID 和密码?好吧,您可以等待操作系统为您初始化网络适配器,但您需要在调用之间保存/恢复网络主机控制器的完整状态。这不是一个小或容易的项目。