使用链接描述文件显式设置起始堆栈指针

时间:2017-11-16 22:27:01

标签: gcc linker arm ld linker-scripts

我想在虚拟内存的末尾创建一个带有特殊部分的程序。所以我想做一个像这样的链接器脚本:

 /* ... */
 .section_x 0xffff0000 : {
     _start_section_x = .;
     . = . + 0xffff;
     _end_section_x = .;
 }

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

1 个答案:

答案 0 :(得分:1)

我讨厌假设甚至问问题是否错误的答案但是,如果你需要一个64k的段,你为什么不能在启动时分配一个?

为什么您可能需要在进程地址空间中使用固定地址?近30年来,我一直在做很多不同类型的编码,自从受保护的内存出现以来,我还没有看到固定地址的需要。