小编Cin*_*air的帖子

从另一个进程的线程 ID 获取线程句柄

首先,令我感到非常惊讶的是,尽管有必要使用此处记录的 Win32 调试功能来实现一个简单的 Win32 调试器,但 Google 对这个具体问题完全没有表现出任何内容:https: //msdn.microsoft.com /en-us/library/windows/desktop/ms679303%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

当调试器进程从 中返回WaitForDebugEvent、获取任何事件,并且在 DEBUG_EVENT 结构中有一个DWORD dwThreadId成员(当然是被调试进程的线程 ID )时,我所要求的必要性就出现了。现在,我想使用 来操作这个调试线程Get/SetThreadContext,它只接受HANDLE hThread. 所以,我需要某种方法来从线程 ID 获取句柄,但似乎没有办法为另一个进程执行此操作(OpenThread仅适用于当前进程)。

但是,之所以需要实现一个简单的调试器,是因为当调试器要处理INT3断点时,被调试者已经执行了INT3指令,并且需要递减 EIP 来解决这一问题,因此需要 SetThreadContext。因此,如果我做不到这一点,我什至无法实现像 INT3 断点这样基本的东西!

底线是,必须有一种方法,某种未记录的方法(甚至谷歌中都没有出现任何内容!),因为所有现有的、工作的调试器都在那里,也许是ntdll.dll?中的一些未记录的函数。

我在 Google 上找到的有关 INT3 断点的 Win32 实现的所有信息都只是使用hThread从初始调用中检索到的信息CreateProcess,当调试对象只有一个线程时,这可以完美地工作,但这显然是一个严重的限制。

c debugging winapi multithreading

3
推荐指数
1
解决办法
2015
查看次数

标签 统计

c ×1

debugging ×1

multithreading ×1

winapi ×1