是否可以在 Windows 中确定线程的堆栈位置?



我正在进行一个项目,我需要对过程的地址空间进行完全控制。我需要将线程的堆栈从目前的位置移开到我选择的预定义区域,因为我需要对原始堆栈内存进行处理。我找不到有关如何执行此操作的任何事情,只有如何处理堆栈尺寸,但这不是我需要的。我有两个想法如何做到这一点,它们都不是理想的:

  • 将ESP和EBP设置为我的预定义区域,并更新线程TEB中的堆栈基础和堆栈限制字段。这听起来像是一个坏主意
  • 到处都是保留内存,基本上迫使新线程的堆栈被分配在我留下的空间中。我知道这是一个可怕的主意。

这样做完全有可能做的事情吗?它不必是同一线程。

编辑:只要我可以处理原始堆栈并确定新/旧堆栈的新位置,任何事情都会做。因此,复制/移动堆栈,杀死旧线程,并在预定义的位置等用堆栈启动新线程。我不需要旧线程,我只需要一种方法来强制线程在某个位置(已经解决)并将其堆叠在我决定的安全位置。因此,在那种情况下,可以丢弃旧的堆栈数据,因为我目前不依赖它。

如果要释放系统分配堆栈,则打开一罐蠕虫。问题在于您需要了解线程上方的所有堆栈框架的结构。这些帧可以在堆栈上引用地址,以便删除它们可能会引起各种问题。

您可以使用1页的堆栈创建线程,而不会对其进行划分。然后分配自己的内存块,然后将其地址移至堆栈指针寄存器中。在您的顶级线程例程中。

最新更新