我正在使用ZwCreateThread在VS C ++ win64 native中创建一个线程,我几乎让它工作,除非我的线程在程序集中执行ret指令我得到访问冲突,因为我还没有放回一个返回地址堆栈,所以我的程序试图在内存位置0执行代码
显然这不起作用。所以问题是CreateThread和CreateRemoteThread在堆栈上放置了什么地址?
我在想我可以使用ExitThread函数的地址。 这是否合适?
此外,目标处理器是AMD64
答案 0 :(得分:1)
在Windows ret
指令中,应正确终止线程。可能你的代码以某种方式打破了堆栈。虽然,即使在这种情况下,调用ExitThread
也应该有效。
答案 1 :(得分: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");