
Un programme de type strace pour l'API 'native' de Windows.
Voir aussi http://rogerorr.github.io/NtTrace/
Vous aurez besoin de la version 64 bits et/ou 32 bits de NtTrace, selon votre ou vos applications cibles.
scripts\build-vs-x64.bat ou scripts\build-vs-x86.bat pour compiler respectivement la version 64 bits ou 32 bits.ou
nmake /f NtTrace.makou
nmake /f NtTrace.makNtTrace est conçu pour être exécuté depuis la ligne de commande.
Il peut être utilisé pour exécuter un programme, avec des arguments si nécessaire.
Par exemple :
NtTrace -filter File cmd /c echo hello
ou pour s'attacher à un processus existant par son PID ou, en utilisant l'option -a, par son nom.
Par exemple :
NtTrace 1234
ou
NtTrace -a notepad
Exécutez NtTrace -h pour une liste complète des options.
Par défaut, NtTrace cible l'API Windows Native exposée via NtDll.dll
Des fichiers de configuration sont également fournis pour de nombreux points d'entrée qui prennent en charge l'interface graphique Windows :
Gdi32Trace.cfg pour l'interface de périphérique graphique (GDI)
User32Trace.cfg pour l'interface utilisateur (User)
Vous pouvez en sélectionner un, au lieu du fichier NtTrace.cfg par défaut, en utilisant l'argument de ligne de commande -config.
Windows est livré avec DbgHelp.dll dans le répertoire system32. Cependant, des versions plus récentes de cette DLL sont parfois disponibles auprès de Microsoft dans leurs SDK.
La version de la DLL installée avec le système d'exploitation a tendance à prendre le pas sur une version plus récente qui pourrait être téléchargée.
Si vous constatez que vous avez besoin d'une version plus récente que celle installée dans le répertoire système, vous
pouvez simplement copier la version plus récente de DbgHelp.dll dans le même répertoire que NtTrace.exe.
(Vous devrez également copier SymSrv.dll et SrcSrv.dll)
NtTrace fonctionne en utilisant l'interface de débogage Windows pour placer des points d'arrêt dans NtDll autour des appels Windows natifs vers le noyau. Chaque fois qu'un point d'arrêt est atteint, NtTrace lit les arguments passés à / les valeurs renvoyées par l'appel associé.
Il fonctionne au niveau utilisateur et n'affecte que le processus spécifique (et ses enfants). Aucune tentative n'est faite pour entrer dans le noyau. C'était une décision de conception délibérée car cela signifie que l'outil peut être utilisé sans nécessiter de droits d'administration ou d'autorisation pour installer des pilotes de périphériques. Cependant, cela signifie également que l'outil ne capturera pas :
NtTrace trace également, par défaut, les processus enfants du processus initial lancé ; l'option -pid ajoutera l'ID du processus à chaque ligne de sortie
pour aider à identifier quel processus a effectué quels appels. L'option -only supprime le traçage des processus enfants.
Il gère également les applications multi-threads (et l'option -tid aidera à identifier quel thread effectue chaque appel).
Cependant, notez que, étant donné que l'interface de débogage Windows est basée sur les événements, si plusieurs threads effectuent tous des appels simultanément,
alors le traçage sera sérialisé.
Par défaut, les appels dans NtDll sont tracés ; les fichiers de configuration pour Gdi32 et User32 sélectionnent une DLL cible différente. NtTrace ne prend actuellement pas en charge le traçage simultané de différents types d'appels système.
La configuration des appels natifs est contenue dans NtTrace.cfg et ce fichier est analysé au démarrage du programme. Notez que différentes versions de Windows prennent en charge différents ensembles d'appels.
Certaines fonctions natives sont officiellement documentées par Microsoft, mais beaucoup sont non documentées. La liste (presque) complète a été obtenue par une combinaison de travail de détective sur les fonctions et à partir de sites web, tels que ReactOS.
Chaque fonction est assignée à une catégorie, et le filtrage peut être effectué par nom de fonction (correspondance partielle) et par catégorie de fonction.
Par défaut, NtTrace trace lors du retour de l'appel système, mais l'option -pre peut être utilisée pour tracer également avant l'appel.
Cela peut être utile si, par exemple, la même structure est utilisée pour un tampon de requête et de réponse.