【发布时间】:2019-04-07 18:54:46
【问题描述】:
我对在这个问题中找到的链接器脚本的行为有疑问:
https://stackoverflow.com/a/55193198/2421349
为了节省您的点击,相关部分是:
OUTPUT_ARCH(riscv)
MEMORY
{
/* qemu-system-risc64 virt machine */
RAM (rwx) : ORIGIN = 0x80000000, LENGTH = 128M
}
ENTRY(_start)
在后面的部分:
PROVIDE (__executable_start = SEGMENT_START("text-segment", ORIGIN(RAM)));
. = SEGMENT_START("text-segment", ORIGIN(RAM)) + SIZEOF_HEADERS;
PROVIDE(__stack_top = ORIGIN(RAM) + LENGTH(RAM));
我们将__executable_start 设置为从ORIGIN(RAM) 开始。然后我们使用. 命令将链接器输出位置SIZEOF_HEADERS 向前移动字节。最后我们设置__stack_top = ORIGIN(RAM) + LENGTH(RAM)。
假设堆栈向下增长到ORIGIN(RAM),如果堆栈增长足够大,它最终不会覆盖__executable_start 和SIZEOF_HEADERS 是什么?
【问题讨论】: