我检查过的每个 EFI 映像40h
在 MS-DOS 存根和在某些情况下未使用的 PE 签名之间至少有字节填充。它充满了零。
我正在编写一个链接器,我的第一个计划是在指定位置有 0 填充,但似乎 UEFI 加载器在加载文件后只是停止响应。我尝试了一些奇怪的组合,例如将 DOS 标头和 PE 标头合并到一个位置,但发生了同样的问题。
我还尝试完全删除 DOS 存根,由于某种原因,我的固件仍然能够识别图像。通常,如果图像不以MZ
签名开头,加载程序会打印错误消息并退出。我敢肯定,在这种情况下,它会正确地直接解析 COFF 格式,因为在为可选标头写入无效的 Magic 值之后,加载器会识别并打印错误消息。问题是它仍然会出错并且什么也不打印。它只是挂起。像这样正常解析PE标头。我可以指望它在其他机器上工作吗?
我敢肯定,否则图像可以正常工作。即使不是这样,当有填充时,加载程序也会打印错误消息并退出,而不是仅仅挂起。如果图像加载并成功执行,它应该打印Hello World
消息。当10h
填充存在并且一切开始正常工作时,就会发生这种情况。我如何完成这样的任务?有什么建议么?