C 我可以创建一个堆栈位于特定地址的线程吗?

C 我可以创建一个堆栈位于特定地址的线程吗?,c,windows,multithreading,winapi,memory,C,Windows,Multithreading,Winapi,Memory,我正在做一点实验,想知道是否有可能在我提供的特定地址创建一个线程及其堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域内生成 我对此感兴趣的原因是,我希望在某个点将整个堆栈复制到远程进程,并且需要指针保持完整,并且线程堆栈不会发生冲突 我知道这可能不是最好/最安全的方法,但这只是一个小爱好项目。如果你知道如何在Linux上做到这一点,我也很感兴趣。只是整理一下评论 对于Unix(posix),答案是。(另请参见上面的链接) Hmmm。。。您知道系统管理的内存(如堆栈)会移动,

我正在做一点实验,想知道是否有可能在我提供的特定地址创建一个线程及其堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域内生成

我对此感兴趣的原因是,我希望在某个点将整个堆栈复制到远程进程,并且需要指针保持完整,并且线程堆栈不会发生冲突


我知道这可能不是最好/最安全的方法,但这只是一个小爱好项目。如果你知道如何在Linux上做到这一点,我也很感兴趣。

只是整理一下评论

  • 对于Unix(posix),答案是。(另请参见上面的链接)

Hmmm。。。您知道系统管理的内存(如堆栈)会移动,并且您的指针在线程生命周期结束时可能无效,对吗?另外,您知道堆栈中的所有内存都将在线程退出时被释放和回收(因此,当您获得它时,所有内存都将无效,并且另一个进程可能正在使用它)。。。对吗?太遗憾了,你不在POSIX/Unix/Linux/WhateverBSD上,你可以使用…@Myst-System不能也不能移动堆栈。如果它这样做了,所有指针都将无效。对象在其整个生命周期中都有相同的地址。即使您可以为堆栈指定特定的地址,也无法使您更接近您要解决的问题。堆栈上的值可以是任何内容:屏幕坐标、GDI对象句柄、文件指针、内核对象句柄、指向动态分配对象的指针,等等。将此数据复制到外部进程会使其无法使用。LOL,移动虚拟内存、堆栈等。我的应用程序运行时间都不会超过几毫秒:)即使在Windows下,您也可以选择一个缓冲区作为堆栈,只需在创建线程时保留一个最小的缓冲区,并在退出或调用
ExitThread
时恢复原始堆栈即可。只需使用一个小的程序集包装器来切换堆栈指针,并在伪造的堆栈框架上调用C。您将需要通过结构异常手动处理保护页/溢出检查,并且存在特定于平台的微妙之处(异常展开记录、双堆栈安腾、对齐要求等)。再加上自上次尝试以来我一直压抑的许多微妙之处。看看这篇关于调整Xeon处理器堆栈地址的文章。。我没有看到任何特定于Xeon的
asm
,因此它可能适用于其他x86 Windows平台。。