Google a publié GWPSan, un outil pour détecter les erreurs à l'exécution des applications.

Google a publié les codes sources de l'outil GWPSan, conçu pour détecter les erreurs lors de l'exécution d'applications compilées pour les architectures x86-64 et ARM64. GWPSan se présente sous la forme d'une bibliothÚque partagée, qui est liée au démarrage de l'application à l'aide de LD_PRELOAD et utilise les mécanismes de pause (PERF_TYPE_BREAKPOINT) et d'échantillonnage des processus disponibles dans le noyau Linux pour analyser l'exécution du programme. Le code est écrit en C++ et est distribué sous la licence Apache 2.0.

GWPSan est conçu comme un cadre modulaire, prenant en charge l'ajout de modules mettant en Ɠuvre des dĂ©tecteurs de diffĂ©rentes classes d'erreurs. GWPSan effectue une analyse dynamique, activĂ©e via des gestionnaires de signaux, ce qui permet d'Ă©viter toute modification du code binaire de l'application. Pour que la plupart des dĂ©tecteurs fonctionnent efficacement, la compilation de l'application doit ĂȘtre rĂ©alisĂ©e avec des drapeaux spĂ©cifiques du compilateur, ajoutant les mĂ©tadonnĂ©es nĂ©cessaires. Au minimum, Clang 18 et un noyau Linux 6.4 sont nĂ©cessaires.

Actuellement, trois détecteurs sont disponibles :

  • UAR (Use-after-return) — dĂ©tecte les erreurs causĂ©es par l'utilisation d'un objet sur la pile aprĂšs la sortie de la fonction dans laquelle cet objet a Ă©tĂ© dĂ©fini. La protection est organisĂ©e par l'interception des points d'entrĂ©e et de sortie de la fonction — Ă  l'entrĂ©e, la pile est remplacĂ©e par une copie pour utilisation durant l'exĂ©cution de la fonction, et Ă  la sortie, l'ancien Ă©tat de la pile est restaurĂ©.
  • TSan (Thread Sanitizer) — identifie les conditions de concurrence entre les threads (Data-race), qui se produisent lorsque diffĂ©rents threads exĂ©cutĂ©s simultanĂ©ment peuvent lire ou modifier des zones de mĂ©moire partagĂ©es sans utiliser de primitives pour synchroniser leurs opĂ©rations. La protection repose sur l'utilisation de points d'arrĂȘt matĂ©riels, attachĂ©s aux zones de mĂ©moire partagĂ©es. Un gestionnaire dĂ©clenchĂ© suspend temporairement l'exĂ©cution du thread lors de l'accĂšs Ă  la mĂ©moire et, pendant cette suspension, vĂ©rifie si un point d'arrĂȘt a Ă©tĂ© dĂ©clenchĂ© pour un autre thread.
  • LMSan (Lightweight Memory Sanitizer) — dĂ©tecte l'utilisation de donnĂ©es non initialisĂ©es en mĂ©moire. Le dĂ©tecteur est marquĂ© comme expĂ©rimental et n'est pas recommandĂ© pour un usage gĂ©nĂ©ral.

GWPSan analyse le code exécutable d'un programme en utilisant le framework DynamoRIO pour décoder le code machine en instructions abstraites ISA, qui sont ensuite exécutées à l'aide d'une émulation. Des signaux périodiques d'une minuterie appellent un gestionnaire unifié, qui exécute une portion déterminée d'instructions pour le flux analysé à chaque appel. En cas de détection de l'exécution de certaines instructions, un détecteur de problÚmes spécifique aux instructions est déclenché ; par exemple, pour les instructions accédant à la mémoire, un détecteur d'états de concurrence est activé.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster