Получение имени модуля из информации о потоке - PullRequest
5 голосов
/ 01 марта 2011

Я пытаюсь получить имя модуля для каждого потока в процессе.Process Explorer показывает имя модуля, связанного с каждым потоком без проблем.Я могу без проблем перечислить все модули и все потоки в моем текущем процессе и получить данные, связанные с ними.Мой текущий метод вывода связанного модуля следующий:

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

К сожалению, это не кажется конкретным способом сделать это.Модуль xfire_toucan.dll показывает в порядке procxp:

1972 : xfire_toucan.dll!ToucanSendGamestatsConsoleLine_V1+0x80

В списке модулей он отображается с базовым адресом 0x10000000 и размером 0x26b000, что дает нам максимальный адрес памяти, равный0x1026b000.Однако связанный с ним начальный адрес потока равен 0x775e2ca0, который является частью выделенного блока памяти в процессе, выходящем за пределы диапазона основной памяти модуля.

Есть идеи, как получить модуль, подобный ProcExp?

Я знаю C и C #, так что все в порядке, но мой проект на C #, поэтому он предпочтителен:]

1 Ответ

3 голосов
/ 01 марта 2011

Process Explorer не показывает модуль, связанный с каждым потоком. Windows не поддерживает эту информацию. Он показывает вам имя символа для точки входа потока. Обычно это (но не всегда) функция в модуле, который запустил поток. Если вы хотите получить такую ​​информацию в своей программе, вы можете использовать API справки отладки. Вероятно, они используют функцию StackWalk64 для получения имени точки входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...