(这是在 x86-64 Linux 的上下文中。)
我正在尝试编写一个高可靠性的用户态可执行文件,并且我可以完全控制生成的程序集。我不想依赖自动堆栈分配,所以我想把堆栈放在一个已知的位置。假设我计算出我的程序最多使用 414 字节的堆栈空间(完全正确)。在 .bss 部分分配 414 个字节并将 RSP 指向顶部是否安全?我想确保堆栈管理在任何时候都不会触及该区域之外的字节。
虽然我可以确定我的程序不会在该区域之外写入,但我需要进行一些系统调用(使用syscall
指令),并且我认为至少部分内核代码在调用可执行上下文中运行。它会破坏我的堆栈吗?
此外,程序中的任何一点都可能发生中断,“红区”背后的故事似乎表明,中断处理程序可以随意写入 RSP-128 之外的任意大区域,可能会破坏我的数据。我对这种行为有哪些保证?