gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:13:35 25 4
gpt4 key购买 nike

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

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

ProcessExplorer 会这样做,但我完全不知道他们是怎么做到的:(

example

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

我通过使用 EnumProcesses (Name to PID) 获取 PID但是对于如何实现另外两个必需的功能一无所知。

最佳答案

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

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

这里或多或少是一步一步的过程:

  • 使用NtQueryInformationThread查询线程的起始地址。 ( Code here )
  • 找到该地址属于哪个模块并加载它的符号文件(pdb)
  • 现在查询该符号文件以获取该地址处的函数名称(如果存在)。 ( Code here ) 如果该地址没有函数,他们只是以一种漂亮的方式返回模块名称和起始地址 ( ModuleName.dll+<startAddress - moduleBase> )

我希望这能澄清一些事情。

关于C++/Win32 - 如何迭代特定进程的线程列表并将起始地址解析为模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57133611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com