Notes de publication de Time Travel Debugging (TTD)
Cette rubrique fournit des informations sur les nouveautés de Time Travel Debugging (TTD).
1.11.429
Cette mise à jour de TTD contient quelques corrections de bogues ainsi que des changements internes pour améliorer la fiabilité.
Note : La version 1.11.410 a introduit une régression dans l'émulation de l'instruction Intel/AMD LODSD. Un correctif sera apporté dans la prochaine version.
Correctifs :
- Amélioration de la robustesse de la lecture des paquets et autres changements divers pour améliorer la fiabilité.
- Correction d'une régression dans l'émulation de l'instruction AVX VBROADCAST[I/F]128.
- Corrigez l'accès à l'enregistrement des exceptions sur ARM64 dans les versions plus récentes de Windows.
1.11.410
Amélioration de l'accessibilité : L'interface de progression s'adapte désormais correctement aux changements de taille du texte.
La commande @$cursession.TTD.Calls()
du débogueur prend désormais en charge les caractères génériques qui correspondent à un grand nombre de fonctions.
Il est désormais possible d’interroger un grand nombre de fonctions (@$cursession.TTD.Calls("kernel32!*")
).
Automatisation : Une nouvelle option de ligne de commande -onMonitorReadyEvent
indique quand le moniteur d'enregistrement (commutateur -monitor
) est prêt à enregistrer de nouveaux processus.
Correctifs :
- Correction de certaines conditions de course lors de l'initialisation de l'enregistreur.
- Correction de la façon dont nous enregistrons les appels syscall afin que les points d'arrêt fonctionnent correctement.
- Correction de plusieurs problèmes liés à l'enregistrement sélectif des modules.
Corrections pour ARM64 :
- Correction d'un bogue empêchant l'enregistrement TTD sur les processeurs simples de niveau ARM64v8.0.
- Amélioration de la messagerie lors de la tentative d'utilisation sur ARM64 d'une trace d'un processus x86 ou x64.
Corrections AMD/Intel (y compris certains problèmes signalés par Google) :
- Correction de l'émulation incorrecte de LODS : au lieu de mettre à zéro les bits inutilisés de RAX, ils sont maintenant correctement préservés.
- Correction de l'émulation de l'instruction « pop ax » dans les processus x86/x64, qui mettait incorrectement à zéro les bits supérieurs du registre complet (par exemple, « pop ax » effaçait les bits supérieurs de rax).
- Émulation directe de l'instruction XGETBV (plus rapide).
- Emulation directe de tous les mouvements SIMD de l'AVX512 (plus rapide).
1.11.316
Correction d'une régression qui provoquait des plantages occasionnels lors de l'enregistrement de programmes comportant de longues séquences ininterrompues d'instructions lourdes en données.
Corrections pour ARM64 :
- L'enregistrement dans les processus ARM64 dont la fonctionnalité PAC est activée est désormais pris en charge.
- Correction des instructions ANDS et TST, qui ne parvenaient pas à effacer les indicateurs de retenue et de dépassement de capacité.
Corrections AMD/Intel :
- Correction d'un bogue où TTD émulait incorrectement « xchg r8,rax » et « xchg r8w,ax » comme NOP.
1.11.304
TTD implémente désormais et met à la disposition du public une API pour contrôler l’enregistreur depuis le processus enregistré en direct. La documentation ainsi qu’un exemple sont disponibles sur GitHub.
TTD peut désormais s’injecter avec l’enregistrement désactivé en utilisant le nouveau commutateur -recordMode
. Par défaut, TTD utilise -recordMode Automatic
, ce qui entraîne l’enregistrement de tous les threads. S’il -recordMode Manual
est spécifié, TTD injecte dans le processus cible, mais n’enregistre rien tant qu’il n’est pas dit de le faire via un appel d’API.
L’enregistrement peut désormais être restreint à un ensemble spécifique de modules en utilisant le commutateur -module
. Dans certains scénarios, cela peut entraîner un enregistrement beaucoup plus rapide et des fichiers de trace plus petits. Plusieurs commutateurs -module
peuvent être spécifiés.
Les composants d’enregistrement et de ré-exécution correspondants sont désormais inclus dans la distribution. En cas d’incompatibilité entre le débogueur et l’enregistreur en ligne de commande, ou un bug de ré-exécution, les composants de ré-exécution peuvent être copiés dans l’installation du débogueur en tant que solution de contournement jusqu’à ce qu’un nouveau débogueur soit publié.
L’emplacement du fichier installé peut être trouvé dans Powershell en faisant ceci :
ls (Get-AppxPackage | where Name -eq 'Microsoft.TimeTravelDebugging').InstallLocation
Ajouté
- Ajoutez le commutateur -recordmode pour activer l’injection sans enregistrement automatique (1.11.296)
- Ajoutez le commutateur -module et utilisez-le pour créer une configuration SR (1.11.291)
- Données personnalisées du projet enregistrées par l’API en cours de traitement en modèle de données (1.11.286)
- Ajoutez un nouveau TTDLiveRecorder.dll et connectez-le avec TTDRecordCPU.dll (1.11.283)
- Ajoutez des composants de ré-exécution à MSIX & corriger la recherche de SDK (1.11.265)
Modifié
Aucune
Fixe
- Contourner un bug dans le sérialiseur JSON nlohmann, utilisé dans certains outils internes (1.11.281)
- A contribué à une correction de cette bibliothèque qui sera disponible dans une version future.
- Ajustez l’alignement des chaînes pour éviter un bug rare de CRT (1.11.279)
- Signalé et corrigé dans les bases de code de VS et OS.
- Plusieurs petites corrections à partir de rapports d’erreurs Watson (1.11.276)
- Correction d’une régression qui peut causer la corruption du fichier de trace dans certains cas (1.11.264)
Problèmes connus
- Sur ARM64, le compilateur échoue à appeler en queue un certain nombre de fonctions à haute fréquence, ce qui, dans des cas extrêmes, peut entraîner l’épuisement de la pile du processeur et le crash.
1.11.261
Les changements notables dans cette version incluent :
- [ARM64] Correction du comportement des instructions
SXTL
,SQXTN2
,SQXTUN2
,UQXTN2
,XTN2
etTRN1
lorsque le registre de destination est utilisé comme source. - [ARM64] Correction d’un problème qui faisait que le débogueur affichait les registres SIMD avec leurs 64 bits inférieurs dupliqués dans les 64 bits supérieurs.
- [AMD64] Corrections de l’émulation AVX512 pour les processeurs Zen4 d’AMD (les registres étaient corrompus).
Modifié
- Implémentation d’un nouveau système de version spécifique à l’émulateur. (1.11.260)
Fixe
- Correction des instructions ARM64 défectueuses où le registre de destination est également utilisé comme source. (1.11.261)
- Correction de la solution de contournement Zen4 pour les retours directs vers l’émulateur. (1.11.222)
1.11.202
Cette version corrige un certain nombre de problèmes rencontrés lors de l’enregistrement de services ou de la surveillance du lancement de processus via le commutateur -monitor
. Elle supprime également le support d’enregistrement ARM32 du produit.
Modifié
- Réduit la taille binaire en reliant les composants TTD à UCRT en tant que DLL. (1.11.191)
Fixe
- Correction de l’enregistrement des services. (1.11.193)
- Correction de plusieurs problèmes lors de l’utilisation de -monitor. (1.11.189)
- Correction du cadre de pile de la fonction qui préserve les non volatiles lors de l’exécution de secours sur x64 (1.11.188)
- Réactivation de la mise en mémoire tampon de sortie pour TTD (1.11.187)
- Correction de la manipulation de la poignée du GPO dans le ProcessMonitorServer (1.11.179)
Supprimé
- Suppression du code d’enregistrement ARM32 du dépôt (1.11.198)
1.11.173
Cette version augmente la visibilité de certains messages d’erreur en les extrayant du fichier .out et en les imprimant dans la console. Elle corrige également un crash rare lors de la ré-exécution de la trace.
Modifié
- Extrait et imprime les messages d’erreur à partir du fichier .out (1.11.173)
Fixe
- Correction du conflit de fichiers lors de la lecture du fichier .out à partir d’un processus séparé. (1.11.171)
- Correction du crash rare lors de la ré-exécution de la trace. (1.11.166)
1.11.163
Cette version ajoute la prise en charge de l’enregistrement des processus x86 sur les machines x64.
Modifié
- Correction de l’enregistrement x86 avec une installation TTD x64 (1.11.163)
Fixe
- Nettoyage de l’EULA (1.11.161)
1.11.159
Cette version est la première version publique de l’enregistreur en ligne de commande. Avec plusieurs modifications nécessaires pour permettre la publication publique de l’enregistreur en ligne de commande, cette version inclut également un certain nombre de corrections de bugs, y compris quelques corrections à l’émulateur de CPU.
Le nouveau commutateur -timestampFileName
active la génération de fichiers .run basée sur l’horodatage. Cela est utile lorsque vous enregistrez de nombreuses instances du même processus et que vous souhaitez minimiser le temps de démarrage de l’enregistrement.
Modifié
- Choisissez le mode d’injection par défaut à l’exécution en fonction du traceur utilisé (1.11.156)
- Ajoutez un commutateur pour activer la génération de fichiers .run basés sur les horodatages (1.11.155)
- Ajoutez l’EULA et
-accepteula
à TTD (1.11.154) - Ajoutez ProcLaunchMon.sys à MSIX (1.11.153)
- Créez un MSIX par arch et MSIXBUNDLE (1.11.152)
- Corrigez un certain nombre de problèmes survenus lors des tests de TTD construit avec Clang. (1.11.146)
- Corrections de Clang pour TTDAnalyze (1.11.144)
Fixe
- Retours sur le feedback concernant l’installateur d’applications / publication publique (1.11.159)
- Feedback sur la RC (1.11.157)
- Évitez de détruire le registre Zero en initialisant RegisterInfo pour pointer vers Sink. (1.11.149)
- Corrigez l’instruction TST avec immédiat et améliorez le test unitaire pour la couvrir et plus encore. (1.11.148)
- Consolidez la décision de processus protégé et désactivez l’utilisation de processus protégés (1.11.147)
1.11.138
Modifié
- Créez un enregistreur MSIX (1.11.138)
- Corrigez tous les problèmes afin que Clang puisse construire TTD. (1.11.137)
- Introduisez -monitor X comme moyen d’enregistrer un processus lors de son lancement (1.11.116)
Fixe
- Corrigez l’émulation « CMP ZR » ARM64 (1.11.128)
- Corrigez l’émulation AVX512 sur les processeurs Zen4 d’AMD (1.11.127)
- Corrigez le mécanisme utilisé par TTD pour trouver des fichiers pour un CPU spécifique (1.11.121)
- Corrigez la régression TTD x86 (TTDRecordCPU.dll ne parvient pas à charger) (1.11.110)
- Corrigez le retour au chemin natif sur ARM64 pour ne pas corrompre X28 (1.11.109)