Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么“--oformat二进制文件';gnu链接器的选项将`.data';段为0x0200000_Assembly_Ld_Att - Fatal编程技术网

Assembly 为什么“--oformat二进制文件';gnu链接器的选项将`.data';段为0x0200000

Assembly 为什么“--oformat二进制文件';gnu链接器的选项将`.data';段为0x0200000,assembly,ld,att,Assembly,Ld,Att,我一直在为i386 real mode编写一些“独立”代码,在PXE上网本编写代码时遇到了一些奇怪的错误: PXE-E79: NBP is too big to fit in free base memory PXE-M0F: Exiting Intel Boot Agent. 在对二进制文件进行了大量修改之后,我将其隔离为在 .data 段标记 在HEXDUMP之后,我发现ld将指令一直移动到所有位置的0x0200000 我当前正在使用以下工具生成平面垃圾箱: ld --oformat b

我一直在为i386 real mode编写一些“独立”代码,在PXE上网本编写代码时遇到了一些奇怪的错误:

PXE-E79: NBP is too big to fit in free base memory
PXE-M0F: Exiting Intel Boot Agent.
在对二进制文件进行了大量修改之后,我将其隔离为在

.data
段标记

在HEXDUMP之后,我发现ld将指令一直移动到所有位置的
0x0200000

我当前正在使用以下工具生成平面垃圾箱:

ld --oformat binary

问题:

  • 为什么
    ld
    会这样做

  • 这是否特定于oformat的
    选项

  • 1) 链接器之所以这样做,可能是因为它感觉像这样(例如,可能是为了与80x86上的“2 MiB页”对齐),也可能是因为您没有提供一个链接器脚本,该脚本说除了“链接器感觉像什么”之外,还可以做其他任何事情

    2) 我假设所有的输出格式都“按链接器的感觉”执行(除非链接器被告知其他内容)

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


    在任何情况下,如果您希望链接器执行特定的操作,则需要通过编写链接器脚本来明确地告诉链接器您想要什么。如果您确实编写了一个“不够具体”的链接器脚本,那么您需要使该脚本更加具体。

    1-ld使用默认链接器脚本。尝试使用-v查看默认值 2-不特定于oformat 3-若要设置另一个尺寸,必须使用 -z最大页面大小=0x

    我尝试使用0x100和0x1000,效果很好,但0x500不行


    Salu2 totales

    谢谢,如果有人知道它为什么会这样做,我将保留这个问题。谢谢你的回答。2个MiB页面是什么意思?