关于gcc:使用链接描述文件明确设置起始堆栈指针

Explicitly set starting stack pointer with linker script

我想在Virtual Memory的末尾创建一个带有特殊部分的程序。所以我想做一个链接描述文件,像这样:

1
2
3
4
5
6
 /* ... */
 .section_x 0xffff0000 : {
     _start_section_x = .;
     . = . + 0xffff;
     _end_section_x = .;
 }

问题在于,对于32位应用程序,即使gcc / ld / glibc似乎在默认位置将堆栈加载到此位置,即使该堆栈与已知节重叠也是如此。上面的代码零超出堆栈,导致异常。有什么办法告诉链接器为堆栈使用另一个VM内存位置? (同样,我想确保堆不跨越虚拟内存的这一部分...)。


我讨厌这样的答案,甚至讨厌问这个问题是否对,但是,如果您需要一个64k的网段,为什么不能在启动时就分配一个?

为什么在进程地址空间内可能需要一个固定地址?近30年来,我一直在进行许多不同类型的编码,而且自从受保护的内存问世以来,我就再也没有看到过需要固定地址的问题。