Windows ABI允许我改变堆栈指针吗?



我知道windows ABI对程序prolog的代码生成有一些限制;epilog,但是我想知道操作系统是否可以分配一个大的堆存储并将堆栈指针指向这个位置(并在函数返回之前恢复RSP)?基本上,从我所理解的windows线程有4GB的硬限制,我想知道是否可以增加堆栈限制,或者是否有另一种方式这样做?

我已经阅读了MSDN关于这里的x64堆栈使用情况的信息,但我找不到任何关于为堆栈寄存器分配新值的信息

对于任何自分配的新堆栈必须完成3或4件重要的事情(CreateFiber() API可能自己完成所有这些):

  1. 更新描述栈指针最大值和最小值的指针。这些都在NT_TIB结构(见winnt.h)中,FS:指向32位,GS:指向64位。
  2. 确保新栈有预期的保护页,无效的结束页等,就像真正的栈一样。
  3. 确保SEH帧的链表在新堆栈内,并使最顶层的SEH帧包含扩展SEH处理程序搜索和unwind到前一个堆栈的代码。
  4. 不确定是否有必要以某种方式告知NT内核有关用户模式堆栈限制,但我在Nebbett的书中没有看到这样的机制。

最新更新