OS旁边的UEFI运行时服务

时间:2013-06-23 19:34:04

标签: efi uefi

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

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

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

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

2 个答案:

答案 0 :(得分:2)

  

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

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

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

  

禁止来电者使用其他处理器或其他处理器提供的某些其他服务   处理器遵循表30中规定的中断。

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

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

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

答案 1 :(得分:1)

禁止您执行此操作,因为这将成为病毒,记录程序和其他恶意软件的门户。

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

SMM是与标准保护模式正交的x86处理器的执行模式。 SMM允许BIOS立即完全挂起所有CPU上的操作系统,并进入SMM模式以执行某些BIOS服务。现在,在您的x86计算机上切换到SMM模式,因为您正在阅读此Stackoverflow答案。它由以下方式触发:

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

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

SMM处理程序在UEFI固件初始化的DXE阶段期间设置到SMRAM中,SMRAM是专用于SMM处理程序的区域。请参见下图:

Platform Iniitialization Boot Phases

  

SMM驱动程序在DXE阶段由SMM Core发送。所以   可以在DXE阶段注册其他SMI处理程序。晚了   在DXE阶段,当没有更多的SMM驱动程序可以发送时,SMRAM会   被锁定(按照建议的做法)。一旦SMRAM被锁定,   不能派遣额外的SMM驱动程序,因此不需要额外的SMI   处理程序可以注册。例如,注册的SMM驱动程序   无法从EFI Shell加载SMI处理程序或将其添加为   UEFI启动管理器中的DriverOption。

source: tianocore

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

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

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