2011-03-01 23 views
5

Estoy tratando de obtener el nombre del módulo para cada hilo en un proceso. Process Explorer muestra el nombre del módulo asociado con cada hilo sin problema. Puedo enumerar todos los módulos y todos los hilos en mi proceso actual sin problemas, y obtener datos relacionados con ellos. Mi método actual de deducir el módulo asociado es el siguiente:Obtener el nombre del módulo a partir de la información del hilo

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

Por desgracia, eso no parece ser una forma concreta de hacerlo. El módulo xfire_toucan.dll muestra in fine procexp:

1972 : xfire_toucan.dll!ToucanSendGamestatsConsoleLine_V1+0x80 

En la lista de módulos, se muestra con un addr base del 0x10000000 y un tamaño de 0x26b000, que nos da una addr memoria máxima de 0x1026b000. Sin embargo, la dirección de inicio de subproceso asociada es 0x775e2ca0, que es parte de un bloque de memoria asignado en el proceso fuera del rango de memoria principal del módulo.

¿Alguna idea de cómo obtener el módulo como ProcExp?

sé C y C#, así que o bien está muy bien, pero mi proyecto es C# así que eso es preferible:]

Respuesta

3

Process Explorer no está mostrando el módulo asociado a cada hilo. Windows no mantiene esta información. Le muestra el nombre del símbolo para el punto de entrada del hilo. Esto generalmente (pero no siempre) será una función en el módulo que inició el hilo. Si desea recuperar este tipo de información en su programa, puede usar la API de ayuda de depuración. Probablemente estén usando la función StackWalk64 para recuperar el nombre del punto de entrada.

+0

¿Cómo sería confiable caminar sobre la pila? No hay compensación de pila establecida para la función del hilo. Tampoco hay un conjunto definido de llamadas antes de la función de subproceso: http://stackoverflow.pastebin.com/e1TLxwuj – Polynomial

+0

Mejor descripción de lo que estoy hablando: http://stackoverflow.pastebin.com/cFNjueAq – Polynomial

+0

En realidad, hay es. Para hacer un recorrido de pila, necesita el archivo .pdb asociado con el módulo. Este archivo contiene el tamaño de cada marco de pila, entre otras cosas. –

Cuestiones relacionadas