0

我正在使用 ZwCreateThread 在 VS C++ win64 native 中创建一个线程,并且我几乎可以让它工作,除非我的线程在汇编中执行 ret 指令时出现访问冲突,因为我没有在堆栈上放置返回地址,所以我的程序尝试在内存位置 0 执行代码

显然这行不通。那么问题来了,CreateThread 和 CreateRemoteThread 放在栈上的地址是什么?

我在想我可以使用 ExitThread 函数的地址。这合适吗?

此外,目标处理器是 AMD64

4

2 回答 2

1

在 Windowsret指令中应该正确终止线程。可能您的代码以某种方式破坏了堆栈。ExitThread虽然,即使在这种情况下,调用也应该有效。

于 2013-10-18T19:00:19.177 回答
0

出于某种原因 ZwCreateThread 将 Rsp 寄存器设置为 (tContext.Rsp - 0x30) 如果有人知道为什么会发生这种情况,请分享!

我通过执行以下操作解决了这个问题。

tContext.Rsp = (DWORD64) ((unsigned long long)BaseAddress + RegionSize - 8);
*(PULONG64) ((unsigned long long)BaseAddress + RegionSize - 0x38) = (unsigned long long) GetProcAddress(GetModuleHandleA("kernel32"), "ExitThread");
于 2013-10-19T16:45:08.010 回答