微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何访问尚未开始运行的暂停线程的堆栈?

我想改变一个新创build的远程线程的堆栈,但是在调用CreateRemoteThread来创build处于挂起状态的线程时,堆栈还没有被分配。

我使用Getthreadcontext获取创build暂停线程后的ESP地址,但如果我在VSdebugging器的反汇编窗口中查看此地址,它尚未分配。 此外,使用WriteProcessMemory写入此地址每次都会失败。

如何编辑新创build但已挂起的远程线程的堆栈?

在Windows 10家中设置Composerpathvariables

除了PowerShell压缩文件提取

在windows7上使用mingw32编译Qt 4.8.5:“没有这样的文件或目录”

如何从任务pipe理器closures应用程序时获取事件

在Windows中使用资源

如何杀死从Java内部产生的ant程序

无法findBoost标头版本

dynamic识别控件的容器(GroupBox等)

ingensi / play-framework图像重复下载

无法获取所有文件在pyinstaller链接

当你得到线程句柄时,它的栈被分配,(以及TIB结构)。

MSVS调试器可能会显示错误的信息,所以不要依赖它。

我不确定线程​​上下文是否有正确的值,也许会在稍后设置。

你应该使用TIB结构来获取堆栈地址,如果这真的是你需要的。

如果你只想在线程函数调用之前远程调用函数,那么可以使用QueueUserAPC或RtlRemoteCall ,两者在使用CREATE_SUSPENDED标志创建线程时都可以使用。

你所说的话对我来说似乎相当合乎逻辑。 由于你创建了新的线程暂停,还没有调用线程函数,因此没有堆栈。

也许你可以正常启动线程,让线程暂停自己作为第一个要完成的操作。

IIRC,你应该已经可以访问目标线程的寄存器了,所以如果你设置它的单步标志并且取消挂起,那么将会执行一条指令,然后你将得到控制权 – 但是甚至可以运行单条指令,它的堆栈应该被分配。 这应该给@埃德温的答案大致相同的效果,但不要求你修改目标线程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐