4

我一直在为 i386 实模式编写一些“独立”代码,并在 PXE 网络引导我的代码时遇到了一些奇怪的错误:

PXE-E79: NBP is too big to fit in free base memory
PXE-M0F: Exiting Intel Boot Agent.

在摆弄了我的二进制文件之后,我将其隔离

.data

段标记。

在 hexdumping 之后,我发现 ld 将指令一直移动到0x0200000所有地方。

我目前正在生成我的平板箱:

ld --oformat binary

问题:

  1. 为什么这样ld做?

  2. 这是特定于oformat选项吗?

4

2 回答 2

2

1)链接器这样做可能是因为它感觉像它(例如,可能是为了与 80x86 上的“2 MiB 页面”对齐),并且因为您没有提供一个链接器脚本来说明除了“无论链接器感觉如何”。

2)我假设所有输出格式“无论链接器感觉如何”(除非链接器另有说明)。

注意:实际行为可能由隐藏在某处的默认链接器脚本确定,并且可能是“无论操作系统的发行版感觉如何”,而不仅仅是“链接器感觉如何”。

在任何情况下,如果您希望链接器执行特定的操作,您需要通过编写链接描述文件具体告诉链接器您想要什么。如果您实际上已经编写了一个“不太具体”的链接器脚本,那么您需要使该脚本更具体。

于 2012-05-09T04:34:28.993 回答
0

1-ld 使用默认的链接描述文件。尝试 -v 查看您的默认值 2-不是特定于 oformat 3-要设置其他大小,您必须使用 -z max-page-size=0x

我尝试使用 0x100 和 0x1000 并且工作正常,但 0x500 没有。

Salu2 总计

于 2012-05-10T07:19:06.873 回答