Calendrier des semaines
# | Date | Cours | # | Date | Cours | # | Date | Cours |
---|---|---|---|---|---|---|---|---|
1 | 2024-01-12 | Chapitre 1 | 6 | 2024-02-16 | Chapitre 4 (pratique) | 11 | 2024-03-29 | Férié |
2 | 2024-01-19 | Chapitre 2 | 7 | 2024-02-23 | Chapitre 5 | 12 | 2024-04-05 | Présentations d’articles |
3 | 2024-01-26 | Chapitre 3 | 8 | 2024-03-08 | Chapitre 6 (en ligne) | 13 | 2024-04-12 | Présentations d’outils |
4 | 2024-02-02 | Chapitre 4 | 9 | 2024-03-15 | Rencontres d’étape (en ligne) | 14 | 2024-04-19 | Lecture d’articles |
5 | 2024-02-09 | Chapitre 4 (suite) | 10 | 2024-03-22 | Intra | 15 | 2024-04-26 | Projets |
Évaluation
Évaluation | Pondération | Échéance |
---|---|---|
Examen intra | 30% | Semaine 10 |
Présentation d’articles | 30% | Semaine 12-13 |
Présentation d’outil | 30% | Semaine 14-15 |
Participation au cours | 10% | – |
La matière de l’intra porte sur le contenu des chapitres 0 à 6. Des exercices de révisions sont disponibles, ainsi que les solutions.
Pour l’examen, vous pouvez venir avec deux pages de notes (format lettre, recto-verso, donc 4 faces) manuscrites comme aide mémoire.
Contenu du cours
- Chapitre 0 : Introduction à l’analyse de programmes
- Chapitre 1 : Fuzzing
- Chapitre 2 : Représentation intermédiaire et instrumentation
- Chapitre 3 : Exécution symbolique
- Chapitre 4 : Analyse de flot de données (dataflow analysis)
- Chapitre 5 : Contrôle de flot d’information (information-flow control)
- Chapitre 6 : Interprétation abstraite
- Extra : Graphe de propriété de code et Joern
Articles et outils
Chaque chapitre reprend en sa fin une sélection d’articles et d’outils qui peuvent être utilisés pour les présentations. Selon vos intérêts, vous pouvez sélectionner d’autres articles et outils.
Pour les articles, les critères suivants doivent être respectés :
- publication récente (<10 ans) ou fondamentale
- sur un sujet lié au cours
- à une conférence scientifique ou dans un journal scientifique reconnus
Pour les outils, vous pouvez consulter les listes suivantes reprenant divers outils d’analyse de programmes :
Veuillez valider le choix d’article et d’outil avec l’enseignant au plus tard pour l’intra. Pour la lecture de l’article, référez-vous à How to Read a Paper
Livrables
Pour l’article et l’outil :
- Présentation (10%) de 30 minutes, incluant du temps pour les questions.
- Mini-rapport (5%) de 3 à 5 pages résumant la présentation et prenant en compte les commentaires.
Travail de session
Le travail de session vise à approfondir un domaine en lien avec le cours et peut prendre plusieurs formes : compte-rendu de lecture dans un sous-domaine du cours ou connexe, mise en œuvre pratique de concepts vu en cours, développement de logiciel, etc.
Pour référence, vous pouvez consulter la page du cours de l’édition précédente qui liste les projets de session réalisés cette année.
Livrables
- Choix du sujet (5%)
- Rencontre d’étape (5%)
- Présentation finale (10%) : 30 minutes, incluant du temps pour les questions.
- Mini-rapport résumant la présentation (10%) : un rapport de 3 à 5 pages en PDF, incluant un titre et un court résumé du projet (un ou deux paragraphes).
Présentations
Quelques conseils pour une présentation efficace :
- Les diapositives sont un support visuel, et amènent un élément complémentaire à la présentation orale.
- Éviter des liste de points quand ce n’est pas pertinent.
- Éviter d’inclure de longues phrases sur les diapos.
- Éviter de simplement lire le contenu des diapositives.
- Illustrer avec des exemples
- Inclure des figures et autres visualisations quand c’est pertinent.
- Inclure des numéros de diapositives.
- Inclure les résultats (tableau, graphes)
- S’il y a de la formalisation, c’est utile à avoir dans la présentation s’il y a des questions pointues.
- Environ une diapo par minute de présentation : pour une présentation de 25 minutes, avoir environ 25 diapos.
- Utiliser une taille de police assez grande pour que cela soit lisible par tout le monde dans la salle
- Éviter des contraste de couleur trop faibles (e.g., gris sur blanc)
- S’assurer de l’absence de fautes de français, et une utilisation consistante des la capitalisation
Exemple de structure pour la présentation d’article :
- Titre de l’article, auteurs, nom de la conférence, date
- Introduction, mise en contexte : quel est le problème qu’on vis à résoudre, pourquoi c’est important.
- Éléments de base : introduire les concepts essentiels nécessaires (si c’est pertinent)
- État de l’art : qu’est-ce qui existe avant cet article pour résoudre le problème
- Approche : comment le problème est-il traité
- Résultats : comment l’approche est évaluée, quelles sont les questions de recherche, quels sont les résultats, comment les interpréter
- Limitations
- Conclusion : qu’est-ce que cet article implique
- Discussion / critique de l’article : réflexion de votre part
- Il est important de faire le lien avec les concepts pertinents vus au cours au travers de la présentation
Pour la présentation d’outil, les points éléments sont importants :
- Faire le lien avec le cours
- Donner des exemples
- Expliquer les limitations, idéalement au travers d’exemples
- Expliquer si l’outil donne lieu à des faux positifs / faux négatifs
- Expliquer comment l’outil fonctionne, comment il est implémenté
Image docker
Pour les exercices pratiques utilisant LLVM, vous pouvez utiliser l’image Docker fournie :
$ docker run -v /chemin/vers/code/:/code -it \
registry.gitlab.info.uqam.ca/inf889a/slides/llvm
# export PATH=/llvm-project/build/bin/:$PATH
# clang -S -emit-llvm /code/hello.c
Références
- The Fuzzing Book: Tools and Techniques for Generating Software Tests, Zeller, A., Gopinath, R., Böhme, M., Fraser, G., & Holler, C.
- Static program analysis, Møller, A., & Schwartzbach, M. I.
- Program Analysis, cours de Michael Pradel de 2020-2021.