1

我想知道在链接描述文件中定义符号有什么用。使用链接描述文件来安排不同的部分是可以理解的,但我不清楚在脚本中定义新符号。我正在阅读一篇文章,该文章使用定义两个新符号的链接器脚本,但在链接器脚本或文章中的其他任何地方都没有引用这些符号。一个示例是在 bss 部分中使用 sbss 和 ebss 符号,如下所示:

ENTRY (loader)
SECTIONS
{    . = 0x00100000;
    .text ALIGN (0x1000) :
    {
        *(.text)
    }
    .rodata ALIGN (0x1000) :
    {
        *(.rodata*)
    }
    .data ALIGN (0x1000) :
    {
        *(.data)
    }

    .bss :
    {
        sbss = .;
        *(COMMON)
        *(.bss)
        ebss = .;
    }
}

还有其他经常使用的符号,例如 etext , dataEnd 等。请解释在脚本中没有引用它们时定义这些符号的用途。

4

2 回答 2

0

vjain27,

我不知道为什么要像您的示例链接器脚本定义的那样定义符号。这主要是为了让可执行文件知道一个部分的开始和结束。如果需要复制数据或在内存中进行其他操作,这很有用。

于 2012-10-24T02:37:26.870 回答
0

在编写 x86 引导加载程序时,我希望图像是 512 字节的倍数,方法是:

. =对齐(512);

在链接描述文件中。

但是我需要一些方法来知道确切的大小,并将其传递给al我的引导代码,该代码将传递给将数据从硬盘加载到内存的 int 13h BIOS 调用。所以我写了类似的东西:

__stage2_size = .;
BYTE((ALIGN(.) / 512) - 1);
. = ALIGN(512);

__stage2_size在启动脚本中使用。

于 2015-10-06T21:32:35.530 回答