C 我可以创建一个堆栈位于特定地址的线程吗?
我正在做一点实验,想知道是否有可能在我提供的特定地址创建一个线程及其堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域内生成 我对此感兴趣的原因是,我希望在某个点将整个堆栈复制到远程进程,并且需要指针保持完整,并且线程堆栈不会发生冲突C 我可以创建一个堆栈位于特定地址的线程吗?,c,windows,multithreading,winapi,memory,C,Windows,Multithreading,Winapi,Memory,我正在做一点实验,想知道是否有可能在我提供的特定地址创建一个线程及其堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域内生成 我对此感兴趣的原因是,我希望在某个点将整个堆栈复制到远程进程,并且需要指针保持完整,并且线程堆栈不会发生冲突 我知道这可能不是最好/最安全的方法,但这只是一个小爱好项目。如果你知道如何在Linux上做到这一点,我也很感兴趣。只是整理一下评论 对于Unix(posix),答案是。(另请参见上面的链接) Hmmm。。。您知道系统管理的内存(如堆栈)会移动,
我知道这可能不是最好/最安全的方法,但这只是一个小爱好项目。如果你知道如何在Linux上做到这一点,我也很感兴趣。只是整理一下评论
- 对于Unix(posix),答案是。(另请参见上面的链接)
ExitThread
时恢复原始堆栈即可。只需使用一个小的程序集包装器来切换堆栈指针,并在伪造的堆栈框架上调用C。您将需要通过结构异常手动处理保护页/溢出检查,并且存在特定于平台的微妙之处(异常展开记录、双堆栈安腾、对齐要求等)。再加上自上次尝试以来我一直压抑的许多微妙之处。看看这篇关于调整Xeon处理器堆栈地址的文章。。我没有看到任何特定于Xeon的asm
,因此它可能适用于其他x86 Windows平台。。