Students will complete four small introductory projects that acclimate students
to working with program analysis tools.
These introductory projects shall be done individually, but students should feel
free to discuss them.
Sharing code is prohibited.
Using those experiences, students will also complete a term project of their
own interest and selection, which may be done in groups of up to three.
- Intro project 1 - Due Sep 18th, 11:59pm
- Intro project 2 - Due Oct 2nd, 11:59pm
- Intro project 3 - Due Oct 16th, 11:59pm
- Intro project 4 - Due Oct 30th, 11:59pm
- Final projects
- 1 page proposals due October 10th at 11:59 pm
- Team meetings with me on October 11th as scheduled per team
- Brief presentations in class at the end of the semester
- Papers/Projects due December 5th at 11:59 pm
- LLVM - Tools & IR for analysis & compilation
- Valgrind - Dynamic binary analysis framework
- Pin - Dynamic
binary analysis framework
- WALA - Java & Javascript analysis
- Soot - Java & Dalvik analysis
- OPAL - Java static analysis
- CIL - C analysis
- Frama-C - C analysis
- Astrée
- Seahorn - Collection of tools for verification and abstract interpretation
- Roslyn - C# analysis and transformation
- K - General formal analysis
- CSmith - Test generation for C
- Major - Mutation analysis for Java
- CREST - Symbolic test generation for C
- KLEE - Symbolic test generation for C
- SMACK
- angr - Binary analysis & symbolic execution framework
- Pharos - Binary static analysis
- rev.ng - Binary reverse engineering tools
- radare2 - Binary reverse engineering framework
- Cuckoo - Sandbox for malware analysis
- Unicorn - multi-architexture CPU emulation
- Rosette - Solver-aided programming for synthesis and verification
- Z3 - SMT solver used by many program analyses
- Mistral - SMT solver capable of abductive reasoning
External Resources