我想知道在链接描述文件中定义符号的用法是什么。使用链接描述文件来排列不同的部分是可以理解的,但在脚本中定义新符号对我来说并不清楚。我正在阅读一篇文章,该文章使用定义两个新符号的链接器脚本,但这些符号未在链接描述文件或文章中的任何其他位置引用。一个例子是在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等。请解释在脚本中没有引用它们时定义这些符号的用法。
答案 0 :(得分:0)
vjain27,
我不知道为什么会像你的示例链接器脚本定义的那样定义符号。这主要是为了允许可执行文件知道节的开始和结束。如果需要复制数据或在内存中以其他方式操作数据,这将非常有用。
答案 1 :(得分:0)
编写x86引导加载程序时,我想通过使用以下内容将图像设置为512字节的倍数:
。 = ALIGN(512);
在链接描述文件中。
但是我需要一些方法来了解确切的大小,并将其传递给我的启动代码的overflow:hidden
,这将进行int 13h BIOS调用,将数据从硬盘加载到内存。所以我写了类似的东西:
al
并在启动脚本上使用__stage2_size = .;
BYTE((ALIGN(.) / 512) - 1);
. = ALIGN(512);
。