C++ C++/Win32-如何迭代特定流程';s线程列表并将起始地址解析为模块?

C++ C++/Win32-如何迭代特定流程';s线程列表并将起始地址解析为模块?,c++,c,windows,winapi,C++,C,Windows,Winapi,请记住,我是系统编程的新手 我试图做的是获取特定进程的线程列表(包括系统进程,又名PID 4),并使用模块名获取每个线程的PID ProcessExplorer可以做到这一点,但我完全不知道他们是如何做到这一点的:( 任何帮助,尤其是代码方面的帮助,都将不胜感激 我使用枚举进程(名称到PID)获取PID 但是对于如何实现另外两个必需的函数一无所知。我不能代表ProcessExplorer说话,但是ProcessHacker做了类似的事情,我已经查看了它的源代码好几次了 他们的方法在理论上很简单

请记住,我是系统编程的新手

我试图做的是获取特定进程的线程列表(包括系统进程,又名PID 4),并使用模块名获取每个线程的PID

ProcessExplorer可以做到这一点,但我完全不知道他们是如何做到这一点的:(

任何帮助,尤其是代码方面的帮助,都将不胜感激

我使用枚举进程(名称到PID)获取PID
但是对于如何实现另外两个必需的函数一无所知。

我不能代表ProcessExplorer说话,但是ProcessHacker做了类似的事情,我已经查看了它的源代码好几次了

他们的方法在理论上很简单,但需要一些努力来实现(解析函数名可能很棘手)

这里大致是一步一步的过程:

  • 使用
    NtQueryInformationThread
    查询线程的起始地址。()
  • 查找该地址所属的模块并加载其符号文件(pdb)
  • 现在,如果存在函数名,则在该符号文件中查询该地址处的函数名。()如果该地址处没有函数,则它们将以一种非常简单的方式返回模块名和起始地址(
    ModuleName.dll+
我希望这能澄清一些问题。

我记得系统进程(PID为4)正常用户无法访问(甚至管理员)。 若你们真的想分析系统进程的信息,你们需要学习一些关于Windows内核应用程序的知识


分析过程中的ADS的方法,其他人的答案已经说得非常清楚。

@IharobAlAsimi你能指出在哪里阅读吗?所有win32函数都有在线文档。确切地说,我们谈论的是什么函数?你必须通过阅读文档来弄清楚,但我怀疑它与你使用的是同一个对于这个过程。你是在暗示,我应该尝试从MSDN中与线程相关的整个文档中搜索吗?因为,这让人困惑,因为我在MSDN中搜索了几个小时,用模块名解析线程开始地址,就像我发布的屏幕截图一样,没有。UC mod拥有我和所有xD/谢谢!:)哦,我仍然需要参考“找到该地址属于哪个模块”tho,但猜测它也存在于PH中@아아니으 这可以通过简单地将地址与每个模块的起始地址进行比较来实现。如果它在(moduleBase,moduleBase+moduleSize)范围内,则您可以找到它所在的模块。您无法检查它的堆栈,但仍然可以获取线程列表,并在用户模式下挂起/恢复它们。请使用driverless PH进行检查。