【问题标题】:UEFI LoadImage from MemoryUEFI 从内存加载图像
【发布时间】:2015-09-20 04:30:48
【问题描述】:

我正在研究使用 Bootservices 函数 LoadImage 从内存中加载 UEFI 应用程序映像。函数参数为:

typedef
EFI_STATUS
LoadImage (
  IN BOOLEAN BootPolicy,
  IN EFI_HANDLE ParentImageHandle,
  IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
  IN VOID *SourceBuffer OPTIONAL,
  IN UINTN SourceSize,
  OUT EFI_HANDLE *ImageHandle
  );

允许我提供一个源缓冲区,该缓冲区已经填充了要加载的 PE/COFF 图像。我目前正在使用 sourcebuffer,并已使用有效的 PE/COFF 文件内容预填充缓冲区。我将它传递到 SourceBuffer 下并将 DevicePath 设置为 Null。我收到错误“EFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not understood”。

我做错了什么?

【问题讨论】:

    标签: uefi efi


    【解决方案1】:

    您需要提供有关内存缓冲区的信息作为设备路径 - 在 DevicePath 参数中。

    查看 UEFI 2.5 规范中的第 9 章 设备路径协议(来自 the UEFI forum)。特别是 9.3.2.3 内存映射设备路径

    您应该按原样加载整个文件 - 无需挑选所需的部分。

    例如,您可以查看the GRUB arm64 Linux loader,它就是这样做的。

    【讨论】:

    • 这是我的问题的一部分。如果您有更多见解,我会用新信息更新我的描述,我将不胜感激
    • 从维护一个有用的参考数据库的角度来看,回到原来的问题并将后续问题作为一个新问题提出不是更好吗?
    • 好主意,正在恢复。并提出新问题stackoverflow.com/questions/31317566/uefi-loadimage-hangs
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2015-10-24
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多