Je recherche des ressources pour débuter avec l'analyse de programme .
Le seul livre que j'ai trouvé sur le sujet est le livre Nielson & Nielson .
En dehors de cela, il semble qu'il n'y ait que des livres de "compilateur" où "l'analyse de programme" serait un chapitre, ou quelque chose du genre.
Les gens connaissent-ils d'autres ressources?
Réponses:
Malheureusement, il n'y a pas beaucoup de manuels sur le sujet. Je pense que la meilleure façon d'apprendre l'analyse de programme aujourd'hui est de sonder les différents cours disponibles, de jouer avec quelques implémentations et ensuite de regarder quelques articles de recherche pour vos besoins spécifiques. Ce qui suit est un très petit échantillon de ce qui existe. Étant donné que vous avez mentionné spécifiquement que les analyses orientées compilateur étaient faciles à trouver, je ne couvrirai pas ce type de matériel ci-dessous.
Ressources Web Il s'agit d'articles qui mettent l'accent sur l'utilisation de l'analyse statique en dehors d'un contexte de compilation.
Une discussion Reverse Engineering Reddit sur l'analyse de programme contient de nombreux liens utiles.
Mozilla Wiki sur l'interprétation abstraite.
Deploying Static Analysis , un article du Dr Dobbs par Flash Sheridan
Quelques milliards de lignes de code plus tard: utiliser l'analyse statique pour trouver des bogues dans le monde réel , Al Bessey, Ken Block, Ben Chelf, Andy Chou, Bryan Fulton, Seth Hallem, Charles Henri-Gros, Asya Kamsky, Scott McPeak, Dawson Engler en Communication de l'ACM.
Cours universitaires sur l'analyse de programme
Outils pour jouer avec
Je n'énumère pas beaucoup d'outils de recherche ici. Il y en a beaucoup mais j'ai essayé d'en énumérer quelques-uns que vous pouvez télécharger et jouer pour mieux comprendre la région.
Interproc est un outil très éducatif avec lequel vous pouvez vous familiariser avec l'analyse statique numérique.
La bibliothèque d'abstraction numérique de tablier si vous êtes vraiment dans l'analyse numérique.
Slayer est un outil d'analyse de forme de Microsoft Research.
jStar est un analyseur pour Java basé sur une logique de séparation.
Microsoft Research a de nombreux groupes développant de nombreux outils, dont beaucoup sont disponibles en téléchargement ou ont des démos Web. Je ne peux pas tout énumérer ici et vous suggérer de jouer avec eux.
Il y en a beaucoup plus, mais c'est probablement suffisant pour vous occuper un moment.
la source
Ce champ est extrêmement large ... recherchez des preuves de l'exactitude du programme (il existe quelques outils, comme Klee ). Il y a ensuite toutes sortes de "vérificateurs de programmes" de sophistication variable (voir par exemple attelle ou flawfinder pour un échantillon de la gamme), des programmes qui vérifient la "conformité aux directives de programmation". Même le smatch de Linux tombe dans cette catégorie.
Pour les outils dynamiques, il existe toutes sortes d'outils de couverture des performances / tests et des éléments pour la vérification de la mémoire comme valgrind .
Limitez la plage d'intérêt, puis effectuez une exploration avant.
la source
Il y a deux axes de recherche dans l'analyse de programme:
dynamic
etstatic
l'analyse de programme.Pour avoir un premier aperçu de l'analyse de programme, je vous recommande de lire le chapitre 4, 6, 9 du livre Dragon si vous avez de l'expérience dans les compilateurs .
Ou si au moins vous connaissez les graphiques de base, il serait préférable de suivre un cours de niveau supérieur, comme le MIT 6.820 et le CMU 17-355 / 17-665 / 17-819 .
Ce qui précède concerne l'analyse de programme statique. Si vous vous intéressez davantage à l'analyse dynamique de programme , le profilage de programme est un bon point de départ.
la source