-1
我正在做一个项目,我需要完全控制过程的地址空间。我需要将线程的堆栈从当前位置移到我选择的预定义区域,因为我需要取消分配原始堆栈内存。我找不到如何做到这一点,只有如何处理堆栈大小,但这不是我所需要的。我有两个想法如何做到这一点,它们都不是理想的:是否可以在Windows中决定线程的堆栈位置?
- 将ESP和EBP设置为我的预定义区域,并更新线程TEB中的堆栈基本和堆栈限制字段。这听起来似乎是一个糟糕的主意,因为很难知道是否还有其他地方需要更新,更不用说内核在内部保存有关堆栈位置的簿记信息的可能性。
- 随处存储内存,基本上强制新线程的堆栈分配到我剩下的可用空间中。我知道这是一个可怕的想法。
是否有可能做到这样的事情?它不一定是同一个线程。
编辑:任何事情只要我释放原始堆栈并决定新/旧堆栈的新位置,就会执行任何操作。因此,复制/移动堆栈,杀死旧线程并在预定位置使用堆栈启动新线程等应该会很好。我不需要旧的线程,我只需要一种方法来强制线程在某个位置运行(已解决),并将其堆栈放在由我决定的安全位置。所以在这种情况下,丢弃旧的堆栈数据就好了,因为目前我不依赖它。
是否允许您分配自己的内存,在那里建立一个堆栈并使用它,而不是试图“移动”现有的堆栈?因为你真的不能这样做。但是,你可以复制它。 –
你想在哪一点移动线程堆栈?如果在线程开始在用户模式下执行之前或者在线程EP开始执行之前 - 如果可能的话。但随机的时候,线程已经执行 - 100%是不可能的。例如如何使用指向栈中变量的指针?和主要 - 什么意义尝试这样做? – RbMm
简单的答案是否定的。 –