Systrace pour Windows

85

Je recherche un équivalent Windows de Systrace ou du moins strace . Je connais StraceNT , mais je me demande s'il existe d'autres alternatives. Plus précisément, je recherche un moyen spécifique d'appliquer par programme les stratégies d'appel système, bien que cela puisse être après le fait plutôt que de les arrêter activement.

Existe-t-il actuellement un bon moyen de le faire?

Bryan
la source

Réponses:

26

Logger.exe de WinDbg est le plus proche de strace: http://msdn.microsoft.com/en-us/library/windows/hardware/ff552060(v=vs.85).aspx

EDIT: Il y a aussi wt de windbg: http://blogs.msdn.com/b/debuggingtoolbox/archive/2009/10/12/special-command-tracing-applications-using-wt.aspx

Bruno Martinez
la source
3
Cependant, cela ressemble plus à ltrace qu'à strace car il capture les appels de bibliothèque plutôt que les appels système.
Michael
@BrunoMartinez: vous n'avez pas besoin de spécifier une adresse mémoire pour utiliser strace.
user2284570
38

Quelques options:

Moniteur de processus

Consultez également cet article sur les outils intégrés à Windows 7:

Outils du système d'exploitation de base

djhaskin987
la source
3
Je viens d'utiliser ProcessMonitor pour savoir pourquoi un processus se bloque - il s'avère qu'il essayait d'accéder à un fichier qu'il ne pouvait pas supprimer ... je ne l'aurais jamais compris sans ProcMon
Jamie Cook
2
J'utilise assez souvent strace sous Linux et je suis tombé sur cette question en cherchant un outil similaire sur Windows pour résoudre le problème que j'avais avec NANT. J'ai essayé Process Monitor, défini le filtre pour n'inclure que Nant.exe et excluant tout le reste, également défini un filtre pour l'accès au registre uniquement là où j'avais un problème, et j'ai rapidement compris le problème que j'avais. Je recommande vivement Process Monitor.
hshib
@ djhaskin987: Dans mon cas, j'ai un programme qui charge certains fichiers; tamponnez-les sur ʀᴀᴍ (il n'y a donc plus de poignée) et plantez. Comme il n'y a pas de poignée gauche, le moniteur de processus n'aide pas.
user2284570
@hshib: le problème avec le moniteur de processus est qu'un processus n'a pas besoin d'un handle pour accéder à un fichier. Donc, dans un cas comme le mien (essayer de voir quel fichier de configuration cause un crash) , cela n'aide pas.
user2284570
15

L' outil Dr. Memory ( http://drmemory.org ) est livré avec un outil de suivi des appels système appelé drstrace qui répertorie tous les appels système effectués par une application cible avec leurs arguments: http://drmemory.org/strace_for_windows.html

Pour appliquer par programme les stratégies d'appel système, vous pouvez utiliser les mêmes moteurs sous-jacents que drstrace: la plateforme d'outils DynamoRIO ( http://dynamorio.org ) et la bibliothèque de surveillance des appels système DrSyscall ( http://drmemory.org/docs/page_drsyscall. html ). Celles-ci utilisent une technologie de traduction binaire dynamique, qui entraîne des frais généraux (20% à 30% en régime permanent, mais beaucoup plus élevée lors de l'exécution d'un nouveau code, comme le lancement d'une grande application de bureau), qui peut ou non convenir à vos besoins.

Derek Bruening
la source
11

API Monitor semble très utile à cet effet.

Isaiah Norton
la source
C'est un excellent programme, montre des paramètres de fonction détaillés / valeurs de retour, vous permet de faire un point d'arrêt lorsque certaines conditions sont remplies, de nombreuses méthodes d'accrochage différentes afin qu'il puisse être utilisé sur de nombreux processus qui n'aiment pas être inspectés.
yuikonnu
6

Voici un article assez intéressant, je ne sais pas s'il atteint la cible que vous recherchez mais je pense que vous le trouverez peut-être vous conduire dans la direction que vous souhaitez.

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

w33mhz
la source
1
Merci, c'est plutôt bien. Je suppose que cela signifie que nous sommes encore loin d'une belle et fonctionnelle strace sur Windows ...
static_rtti
3

strace est disponible auprès de Cygwin dans le package cygwin . Vous pouvez le télécharger depuis un miroir Cygwin , par exemple:

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

strace est l'un des rares programmes Cygwin qui ne repose pas sur la DLL Cygwin, vous devriez donc pouvoir simplement copier strace.exelà où vous le souhaitez et l'utiliser.

Steven Penny
la source
6
C'est bien, mais ne semble fonctionner que sur d'autres programmes cygwin. Vous ne pouvez pas strace notepad. Il lance le bloc-notes, mais ne capture aucun appel système.
Michael Fox
2
@MichaelFox: Oui, il n'attrape que les appels à cygwin1.dll.
user2284570
2

Il existe plusieurs outils tous construits autour de Xperf. C'est plutôt complexe mais très puissant - voir le guide de démarrage rapide . Il existe d'autres ressources utiles sur la page Analyse des performances de Windows

the_mandrill
la source
4
strace n'a aucun rapport avec les performances. Il imprime simplement quel système appelle un processus. Les outils de performance ne semblent pas faire cela.
Jan Hudec
1

strace supporté par Git , comme Michael Fox Mention Peut-être pas utile pour les logiciels complexes / windows.

Zaman
la source
0

Vous pouvez utiliser le moniteur de processus écrit par Mark Russinovich. C'est une fantastique petite application qui vous permettra de vous connecter à n'importe quel processus en cours d'exécution sur le système et de voir tous les appels système que ce processus effectue actuellement.

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

Mike
la source
2
djhaskin987 a déjà mentionné Process Monitor dans sa réponse précédente. Vous devez modifier sa réponse et y modifier votre description.
inoubliableidSupportsMonica