gpt4 book ai didi

assembly - 为什么gnu链接器的 `--oformat binary'选项将 `.data'段放在0x0200000

转载 作者:行者123 更新时间:2023-12-04 02:18:11 26 4
gpt4 key购买 nike

我一直在为 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

问题:
  • 为什么ld做这个?
  • 这是否特定于 oformat选项?
  • 最佳答案

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

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

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

    在任何情况下,如果您希望链接器做一些特定的事情,您需要通过编写链接描述文件来具体地告诉链接器您想要什么。如果您实际上编写了一个“比必要的更具体”的链接器脚本,那么您需要使该脚本更加具体。

    关于assembly - 为什么gnu链接器的 `--oformat binary'选项将 `.data'段放在0x0200000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10490658/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com