【问题标题】:Getting module name from thread information从线程信息中获取模块名称
【发布时间】:2011-03-01 16:10:23
【问题描述】:

我正在尝试获取进程中每个线程的模块名称。进程资源管理器显示与每个线程关联的模块名称没有问题。我可以毫无问题地枚举当前进程中的所有模块和所有线程,并获取与它们相关的数据。我目前推导关联模块的方法如下:

if(module.BaseAddress < thread.StartAddress && (module.BaseAddress + module.BaseMemorySize) > thread.StartAddress)
{
    // this is our module ;)
}

不幸的是,这似乎不是一个具体的方法。 xfire_toucan.dll 模块显示在 procexp 中:

1972 : xfire_toucan.dll!ToucanSendGamestatsConsoleLine_V1+0x80

在模块列表中,它以0x10000000 的基本地址和0x26b000 的大小显示,为我们提供了0x1026b000 的最大内存地址。但是,关联的线程起始地址是0x775e2ca0,它是在模块主内存范围之外的进程中分配的内存块的一部分。

知道如何像 ProcExp 那样获取模块吗?

我知道 C 和 C#,所以两者都可以,但我的项目是 C#,所以这是首选:]

【问题讨论】:

    标签: c# windows multithreading winapi module


    【解决方案1】:

    进程资源管理器没有向您显示与每个线程关联的模块。 Windows 不维护此信息。它向您显示线程入口点的符号名称。这通常(但不总是)是启动线程的模块中的一个函数。如果要在程序中检索此类信息,可以使用调试帮助 API。他们可能正在使用 StackWalk64 函数来检索入口点名称。

    【讨论】:

    猜你喜欢
    • 2013-11-06
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多