web-dev-qa-db-fra.com

Gestion des fonctionnalités de type désinfectant sur MSVC

Venant de Linux/gcc/clang je me retrouve de plus en plus à travailler sur Windows/Visual Studio.

Ce qui me manque vraiment, c'est le désinfectant d'adresse (vérification des limites, fuites, utilisation après gratuité, ...). J'ai fait des recherches et j'ai également essayé quelques choses, mais je n'ai pas trouvé de remplacement complet (en termes de fonctionnalités) et fiable. J'ai essayé Dr. Memory par exemple, mais j'ai appris que cela ne fonctionne pas pour les programmes basés sur Qt (du moins pas sur Windows 10).

Alors, comment puis-je obtenir une fonctionnalité de type désinfectant d'adresse sous Windows/MSVC?

13
Frank Meerkötter

Au moins ASan et Ubsan de clang sont censés fonctionner sur Windows, avec certaines limitations. Ceux-ci peuvent être utilisés avec les chaînes d'outils msvc en utilisant clang-cl en remplacement de cl.exe - google semble travailler sur ce , mozilla aussi .

Problèmes que je connais (et qui m'ont empêché de l'utiliser moi-même jusqu'à présent):

  • la liaison avec les bibliothèques requises n'est pas automatique. Il existe deux versions, selon la façon dont le CRT est lié dans votre application (/ MT signifie CRT statique,/MD signifie CRT dynamique, ce dernier est généralement utilisé dans Qt). Pour trouver les paramètres de l'éditeur de liens requis, ouvrez l'invite de commandes Visual Studio, ajoutez le dossier bin clang au chemin d'accès et compilez un simple main.cpp (fonction principale vide) avec des options détaillées avec clang-cl comme ceci: clang-cl -v /MD -fsanitize=address main.cpp Le la commande link.exe requise se trouve à la fin de la sortie détaillée, extrayez les bibliothèques requises pour la liaison à partir de là.

  • seules les versions de versions sont prises en charge sous Windows

  • pas de prise en charge des exceptions sur Windows (voir ce problème)

  • il ne semble pas y avoir beaucoup de travail supplémentaire sur le port Windows, le wiki par ex. est terriblement dépassé (dernier changement en 2015), donc je doute que beaucoup de gens l'utilisent de manière productive. Il peut donc être assez difficile d'obtenir de l'aide d'autres utilisateurs en ligne ...

En parlant d'autres alternatives sur Windows, il y a:

  • Appverifier (fourni avec le SDK Windows)
  • Dr Memory (actuellement non entretenu sous Windows selon quelques commentaires sur son problème tracker, ce qui signifie qu'il est par exemple complètement inutilisable pour Qt et tous ceux qui utilisent les instructions SSE 4.2, voir ici et ici )
  • Intel Inspector (commercial).

Sanitizers et Valgrind sur Linux IMO sont beaucoup plus avancés et/ou ont des performances bien meilleures que ces outils, donc garder une application s'appuyant sur Linux semble la meilleure idée, du moins lorsque vous travaillez avec une boîte à outils multiplateforme comme Qt (comme vous le mentionnez ).

13
FourtyTwo

Microsoft a intégré l'Adress Sanitizer dans Visual Studio 2019 version 16.1 Preview et plus. Malheureusement, seule la version Linux est actuellement prise en charge. Mais au moins, vous pouvez toujours utiliser vos IDE et déboguer les applications préférées dans WSL

ASAN error example

ASAN option

AddressSanitizer (ASan) pour la charge de travail Linux dans Visual Studio 2019


Notez que MSVC lui-même dispose déjà de divers outils pour déboguer les problèmes de mémoire comme CRT Debug Heap comme mentionné ci-dessus par Adrian McCarthy ou Control Flow Guard

Il existe de nombreux outils qui tentent de sécuriser votre code depuis l'extérieur de la boîte: Valgrind et les désinfectants d'adresse/thread sont des exemples populaires. Et il existe également un grand nombre de ces outils sur Windows, à la fois de Microsoft et d'autres sociétés. Mais MSVC dispose de puissantes technologies à l'intérieur du compilateur qui intègrent la sécurité à votre code. Par exemple, Control Flow Guard , est une fonction de sécurité hautement optimisée qui combat de nombreuses vulnérabilités de corruption de mémoire. Nous ne pouvons pas parler ouvertement de nos recherches actuelles sur la sécurité, mais nous nous efforçons toujours de protéger votre code (et le nôtre!) Contre des attaquants de plus en plus sophistiqués.

https://devblogs.Microsoft.com/cppblog/msvc-the-best-choice-for-windows/

Voir également

3
phuclv