
Un programa similar a strace para la API 'nativa' de Windows
Vea también http://rogerorr.github.io/NtTrace/
Necesitará la versión de 64 bits y/o la de 32 bits de NtTrace, la que coincida con su(s) aplicación(es) objetivo
scripts\build-vs-x64.bat o scripts\build-vs-x86.bat para compilar la versión de 64 bits o 32 bits, respectivamente.o
nmake /f NtTrace.mako
nmake /f NtTrace.makNtTrace está diseñado para ejecutarse desde la línea de comandos.
Se puede usar para ejecutar un programa, con argumentos si es necesario.
Por ejemplo:
NtTrace -filter File cmd /c echo hello
o para adjuntarse a un proceso existente por PID o, usando la opción -a, por nombre.
Por ejemplo:
NtTrace 1234
o
NtTrace -a notepad
Ejecute NtTrace -h para obtener una lista completa de opciones.
Por defecto, NtTrace apunta a la API nativa de Windows expuesta a través de NtDll.dll
También se proporcionan archivos de configuración para muchos de los puntos de entrada que soportan la interfaz gráfica de Windows:
Gdi32Trace.cfg para la Interfaz de Dispositivo Gráfico
User32Trace.cfg para la Interfaz de Usuario
Puede seleccionar uno de estos, en lugar del predeterminado NtTrace.cfg, usando el argumento de línea de comandos -config.
Windows incluye DbgHelp.dll en el directorio system32. Sin embargo, a veces hay versiones más recientes de esta DLL disponibles de Microsoft en sus SDKs.
La versión de la DLL instalada con el sistema operativo tiende a tener prioridad sobre una versión más reciente que se pueda descargar.
Si descubre que necesita una versión más reciente que la instalada en el directorio del sistema, simplemente puede copiar la versión más reciente de DbgHelp.dll en el mismo directorio donde se encuentra NtTrace.exe.
(También necesitará copiar SymSrv.dll y SrcSrv.dll)
NtTrace funciona utilizando la interfaz de depuración de Windows para colocar puntos de interrupción en NtDll alrededor de las llamadas nativas de Windows al kernel. Cada vez que se alcanza un punto de interrupción, NtTrace lee los argumentos pasados a/valores devueltos por la llamada asociada.
Funciona a nivel de usuario y solo afecta al proceso específico (y sus hijos). No se intenta entrar al kernel. Esta fue una decisión de diseño deliberada, ya que significa que la herramienta se puede usar sin requerir derechos de administrador ni permiso para instalar controladores de dispositivos. Sin embargo, esto también significa que la herramienta no detectará:
NtTrace también, por defecto, rastrea los procesos hijos del proceso inicial iniciado; la opción -pid agregará el Id. del proceso a cada línea de salida para ayudar a identificar qué proceso realizó qué llamadas. La opción -only suprime el rastreo de procesos hijos.
También maneja aplicaciones multiproceso (y la opción -tid ayudará a identificar qué hilo está realizando cada llamada). Sin embargo, tenga en cuenta que, dado que la interfaz de depuración de Windows está basada en eventos, si varios hilos realizan llamadas simultáneamente, el rastreo se serializará.
Por defecto, se rastrean las llamadas en NtDll; los archivos de configuración para Gdi32 y User32 seleccionan una DLL de destino diferente. NtTrace actualmente no soporta el rastreo simultáneo de diferentes tipos de llamadas al sistema.
La configuración para las llamadas nativas se encuentra en NtTrace.cfg y este archivo se analiza cuando el programa se inicia. Tenga en cuenta que diferentes versiones de Windows soportan diferentes conjuntos de llamadas.
Algunas de las funciones nativas están documentadas oficialmente por Microsoft, pero muchas no están documentadas. La lista (casi) completa se obtuvo mediante una combinación de trabajo de detective sobre las funciones y de sitios web, como ReactOS.
Cada función se asigna a una categoría, y se puede filtrar por nombre de función (coincidencia parcial) y categoría de función.
Por defecto, NtTrace rastrea al regresar de la llamada al sistema, pero la opción -pre se puede usar para rastrear también antes de la llamada.
Esto puede ser útil si, por ejemplo, la misma estructura se usa para un búfer de solicitud y respuesta.