我有一个关于此问题中链接脚本行为的问题:
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
会是什么?
答案 0 :(得分:0)
是的,如果堆栈增长到足够大的程度,它将最终开始覆盖本不应该覆盖的部分内存。但这并非特定于此链接描述文件:最终,内存是有限的资源,任何堆栈都会增长太多,因为分配的自动变量过大和/或无法控制的递归调用最终将导致问题。