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

Har*_*nry 6 linker gcc arm ld linker-scripts

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

 /* ... */
 .section_x 0xffff0000 : {
     _start_section_x = .;
     . = . + 0xffff;
     _end_section_x = .;
 }
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*lum 1

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

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