Systrace para Windows

85

Estoy buscando un equivalente de Windows de Systrace o al menos strace . Soy consciente de StraceNT , pero me pregunto si hay más alternativas por ahí. Específicamente, estoy buscando una forma específica de aplicar mediante programación las políticas de llamadas al sistema, aunque esto puede ser después del hecho en lugar de detenerlas activamente.

¿Existe una buena forma de hacer esto actualmente?

Bryan
fuente
También relacionado - stackoverflow.com/questions/864839/…
sashoalm

Respuestas:

26

Logger.exe de WinDbg es el más cercano a strace: http://msdn.microsoft.com/en-us/library/windows/hardware/ff552060(v=vs.85).aspx

EDITAR: También está el peso de windbg: http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/10/12/special-command-tracing-applications-using-wt.aspx

Bruno Martinez
fuente
3
Sin embargo, se parece más a ltrace que a strace porque captura las llamadas a la biblioteca en lugar de las llamadas al sistema.
Michael
@BrunoMartinez: no necesita especificar una dirección de memoria para usar strace.
user2284570
38

Algunas opciones:

Monitor de proceso

Además, consulte este artículo sobre herramientas integradas en Windows 7:

Herramientas básicas del sistema operativo

djhaskin987
fuente
3
Acabo de usar ProcessMonitor para averiguar por qué un proceso se bloqueaba; resulta que estaba tratando de acceder a un archivo que no podía eliminar ... nunca lo hubiera descubierto sin ProcMon
Jamie Cook
2
Utilizo strace bastante en Linux y encontré esta pregunta mientras buscaba una herramienta similar en Windows para solucionar el problema que tenía con NANT. Probé Process Monitor, configuré el filtro para incluir solo Nant.exe y excluyendo todo lo demás, también configuré el filtro para el acceso al registro solo donde tenía problemas y descubrí rápidamente el problema que estaba teniendo. Recomiendo ampliamente Process Monitor.
hshib
@ djhaskin987: En mi caso tengo un programa que carga algunos archivos; almacenarlos en ʀᴀᴍ (por lo que no queda ningún controlador) y bloquearlos. Como no hay manija, el monitor de proceso no ayuda.
user2284570
@hshib: el problema con el monitor de procesos es un proceso que no necesita un identificador para acceder a un archivo. Entonces, en un caso como el mío (tratando de ver qué archivo de configuración causa un bloqueo) , no es de ayuda.
user2284570
15

La herramienta Dr. Memory ( http://drmemory.org ) viene con una herramienta de seguimiento de llamadas al sistema llamada drstrace que enumera todas las llamadas al sistema realizadas por una aplicación de destino junto con sus argumentos: http://drmemory.org/strace_for_windows.html

Para aplicar políticas de llamadas al sistema mediante programación, puede utilizar los mismos motores subyacentes que drstrace: la plataforma de herramientas DynamoRIO ( http://dynamorio.org ) y la biblioteca de supervisión de llamadas del sistema DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Estos utilizan tecnología de traducción binaria dinámica, que incurre en algunos gastos generales (20% -30% en estado estable, pero mucho más alto cuando se ejecuta un código nuevo, como el inicio de una gran aplicación de escritorio), que puede o no ser adecuado para sus propósitos.

Derek Bruening
fuente
11

API Monitor parece muy útil para este propósito.

Isaías Norton
fuente
Este es un programa excelente, muestra parámetros de función detallados / valores de retorno, le permite establecer un punto de interrupción cuando se cumplen ciertas condiciones, muchos métodos de enganche diferentes para que se pueda usar en muchos procesos que no les gusta ser inspeccionados.
Yuikonnu
6

Aquí hay un artículo bastante interesante, no sé si alcanza el objetivo que está buscando, pero creo que puede encontrarlo que lo lleve en la dirección que desea.

http://jbremer.org/intercepting-system-calls-on-x86_64-windows/

w33mhz
fuente
1
Gracias, eso es bastante bueno. Supongo que significa que todavía estamos muy lejos de un agradable y funcional strace en Windows ...
static_rtti
3

strace está disponible en Cygwin en el paquete cygwin . Puede descargarlo desde un espejo Cygwin , por ejemplo:

http://mirrors.sonic.net/cygwin/x86_64/release/cygwin/cygwin-2.0.2-1.tar.xz
#      |                      |                              |     |
#      +-----------+----------+                              +--+--+
#                  |                                            |
#               mirror                                       version

strace es uno de los pocos programas de Cygwin que no se basa en la DLL de Cygwin, por lo que debería poder copiar strace.exedonde desee y usarlo.

Steven Penny
fuente
6
Es bueno, pero solo parece funcionar en otros programas cygwin. No puedes strace notepad. Inicia el bloc de notas, pero no captura ninguna llamada al sistema.
Michael Fox
2
@MichaelFox: Sí, solo captura llamadas a cygwin1.dll.
user2284570
2

Hay varias herramientas construidas alrededor de Xperf. Es bastante complejo pero muy poderoso; consulte la guía de inicio rápido . Hay otros recursos útiles en la página de Análisis de rendimiento de Windows

the_mandrill
fuente
4
strace no está relacionado con el rendimiento. Simplemente imprime qué llamadas al sistema realiza un proceso. Las herramientas de rendimiento no parecen hacer eso.
Jan Hudec
1

strace compatible con Git , como menciona Michael Fox. Quizás no sea útil para software complejo / windows.

Zaman
fuente
0

Puede utilizar el monitor de proceso escrito por Mark Russinovich. Esta es una pequeña aplicación fantástica que le permitirá conectarse a cualquier proceso en ejecución en el sistema y ver todas las llamadas al sistema que ese proceso está realizando actualmente.

https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx

Miguel
fuente
2
djhaskin987 ya mencionó Process Monitor en su respuesta anterior. Debes editar su respuesta y editar tu descripción en ella.
unforgettableidSupportsMonica