为什么EFI映像在PE / COFF头之前需要一些额外的填充

时间:2016-01-29 12:11:18

标签: image linker portable-executable osdev uefi

我检查的每个EFI图像在MS-DOS存根和PE签名之间至少有40h个填充字节,在某些情况下未使用。它充满了零。

我正在编写一个链接器,我的第一个计划是在指定位置进行0填充,但似乎UEFI加载器在加载文件后只是停止响应。我尝试了一些奇怪的组合,比如将DOS标头和PE标头合并到一个位置但发生了同样的问题。

我也尝试完全删除DOS存根,由于某种原因,我的固件仍然能够识别图像。通常,如果图像不以MZ签名开头,则加载程序会输出错误消息并退出。我确信在这种情况下,它可以正确解析COFF格式,因为在为可选标头写入无效的Magic值之后,加载程序会识别并打印错误消息。问题是它仍然没有任何问题。它只是挂起。解析PE头像这样正常。我可以依靠它在其他机器上工作吗?

我确定图像完全正常工作。即使它没有,当有填充时,加载程序打印错误消息并退出而不是仅挂起。如果图像已成功加载并执行,则应打印Hello World消息。当10h填充存在且一切都开始完美时,就会发生这种情况。我如何完成这样的任务?有什么建议吗?

0 个答案:

没有答案