windows - tag - ¿Cómo funciona Microsoft Detours y cómo lo uso para obtener un seguimiento de la pila?
tag folders (4)
Soy nuevo en Microsoft Detours. Lo he instalado para rastrear las llamadas al sistema que hace un proceso. Ejecuto los siguientes comandos que recibí de la web.
syelogd.exe /q C:/Users/xxx/Desktop/log.txt
withdll.exe /d:traceapi.dll C:/Program Files/Google/Google Talk/googletalk.exe
Me sale el archivo de registro. El problema es que no entiendo completamente lo que está sucediendo aquí. ¿Cómo funcionan los desvíos? ¿Cómo rastrea las llamadas del sistema? Tampoco sé cómo leer la salida en log.txt. Aquí hay una línea en log.txt
20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId()
Finalmente quiero obtener el rastro de pila del proceso. ¿Cómo puedo conseguir eso?
Desvíos le permite interceptar cualquier función. Coloca un jmp en la dirección que especifique creando un trampolín a su código. Finalmente, llamas a la función antigua si quieres hacerlo. Para usar Desvíos, debe inyectar su código en el proceso que desea interceptar.
Para simplificar este proceso, puede usar Deviare API Hook, que hace todo el personal de inyección, y puede usar aplicaciones de intercepción desde cualquier lenguaje de programación que admita la tecnología COM, incluyendo .NET, Delphi, C ++, Python, etc. Después de descargar el paquete, lo hará. Encuentra algunos ejemplos en él. Hay una consola llamada DeviareCSharpConsole que le permite interceptar cualquier API de cualquier proceso que muestre información de seguimiento de la pila completa.
Esta es la forma en que funciona Deviare API Hook, pero es lo que debe hacer si desea crear una aplicación que enganche otro proceso:
Se debe crear un agente en el proceso de destino para interceptar las API que desee. Para interceptar estas API, puede usar Desvíos pero tiene que codificar al personal de IPC que no está incluido en esa biblioteca.
Si necesita escribir código dentro del proceso de destino utilizando Deviare API Hook , puede usar Deviare Custom Hooks . Esta característica le permite interceptar las API y manejar los parámetros procesados de forma asíncrona.
En lugar de desvíos (que son gratis solo para 32 bits) o easyhook (es decir, khm, un código un poco desordenado) es posible que desee revisar mhook 2.4, que es un código muy limpio y con licencia BSD. Funciona en x86 y x64, maneja código relativo a IP, etc.
También hay una descripción detallada de cómo funciona en el sitio.
En cuanto al CaptureStackBackTrace() de la pila, puede usar CaptureStackBackTrace() de kernel32
, o si desea obtener más detalles, use StackWalk64() de dbghelp
.
En primer lugar, le recomiendo ALTAMENTE, que si desea realizar un enlace de API, iría con easyhook: http://easyhook.codeplex.com/ (código abierto). Es un muy buen y fácil marco de api-hooking.
Acerca de cómo obtener el seguimiento de la pila, no recuerdo exactamente cómo hacerlo, pero echa un vistazo a WinAPIOverride32: http://jacquelin.potier.free.fr/winapioverride32/ (código abierto). Él está haciendo exactamente eso, y es de código abierto. Además, si necesita los rastros para la investigación, WinAPIOverride32 es una excelente aplicación para estudiar cómo funcionan las aplicaciones.
EDITAR: Sólo añadiendo una aplicación más. http://www.rohitab.com/ es como WinAPIOVerride32, pero es compatible con 64 bits y realmente mejoró desde que escribí esta respuesta. Debo señalar que en algunos casos perdió las llamadas a la API que encontré en WinAPIOverride32, pero sigue siendo bastante bueno. Lamentablemente la fuente no está publicada.
Acerca de cómo funciona el api-hooking, bueno, es una explicación larga, le recomendaría este artículo: http://www.codeproject.com/KB/system/hooksys.aspx Ofrece una explicación bastante buena de cómo se hace bajo la capucha (hay otros métodos además de lo que está escrito allí, pero aún así, es un muy buen artículo).
¡Espero eso ayude! :-)
Si se le permite usar algo que no sea Detours, puede instalar un depurador como WinDbg y adjuntarlo al proceso para obtener una pila de llamadas.
También puede probar otras herramientas como Process Monitor y Windows Performance Toolkit como se explica here .