我想在虚拟内存的末尾创建一个带有特殊部分的程序。所以我想做一个像这样的链接器脚本:
/* ... */
.section_x 0xffff0000 : {
_start_section_x = .;
. = . + 0xffff;
_end_section_x = .;
}
问题是,对于32位应用程序,gcc / ld / glibc似乎默认在此位置加载堆栈,即使它与已知部分重叠。上面的代码将堆栈导致异常。有没有办法告诉链接器为堆栈使用另一个VM内存位置? (同样,我也希望确保堆不会跨越虚拟内存的这一部分......)。
答案 0 :(得分:1)
我讨厌假设甚至问问题是否错误的答案但是,如果你需要一个64k的段,你为什么不能在启动时分配一个?
为什么您可能需要在进程地址空间中使用固定地址?近30年来,我一直在做很多不同类型的编码,自从受保护的内存出现以来,我还没有看到固定地址的需要。