Получение имени модуля из информации о потоке

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

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

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

1972 : xfire_toucan.dll!ToucanSendGamestatsConsoleLine_V1+0x80

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

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

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

5
задан Stecya 1 March 2011 в 16:22
поделиться