Practical Program Analysis (Winter Semester 2019/20)
|Lecturer||Prof. Dr. Michael Pradel|
|Teaching assistant||Daniel Lehmann|
|Course type||Practical course|
|Ilias||Ilias course (for discussions, etc.)|
|Place||Universitätstr. 38, 0.453|
In this practical course, students will design, implement, and evaluate a program analysis. Every software developer has already used several program analyses, e.g., as part of compilers, IDE tools, bug detection tools, or performance profilers. In this course, students learn to not only use, but to build their own program analysis. A nice side effect of developing a program analysis, is that students become better programmers, because the project requires to deeply reason about programs and their behavior.
This is a plan, i.e., it may change.
|Oct 18, 2019||Introduction||Slides and notes|
|Oct 30, 2019||WebAssembly||
Note the special date: 8am-9:30am in Universitätsstr. 38, 0.463
|Nov 8, 2019||Dynamic analysis with Wasabi||
|Nov 15, 2019||Dynamic analysis with Wasabi|
|Nov 22, 2019||Symbolic/concolic execution and introduction of project||
Slides and notes
|Nov 22, 2019 to Jan 9, 2020||Individual work on project||Milestone due on Jan 9, 2020|
|Jan 10, 2020||Discussion of milestone||
|Jan 11 to Feb 9, 2020||Individual work on project||Project due on Feb 9, 2020|
|Feb 10 to 14, 2020||Project presentations|
Prerequisites for Hands-on Classes and Project
The course builds on top of Wasabi, a dynamic analysis framework for WebAssembly. To follow the hands-on classes and to work on the course project, please make sure to have the necessary software installed. There are two options.
Option 2: Local installation:
Install the following software on your own machine (we've tested the setup on Ubuntu 18.04).
- A recent browser (for executing WebAssembly): Any Firefox or Chromium version less than a year old should suffice.
- Wasabi itself: http://wasabi.software-lab.org/#getting-started
- The transitive dependencies for Wasabi and other tools for the tutorial tasks:
- Rust compiler and cargo package manager (version >= 1.31 stable, for compiling Wasabi): https://www.rust-lang.org/tools/install.
- The usual suspects for building software: Git, a C++ compiler, CMake, make, and Python 2.7.
- WebAssembly Binary Toolkit (WABT) (for manually inspecting and assembling WebAssembly binaries): https://github.com/WebAssembly/wabt#cloning.
- Emscripten (for compiling C examples to WebAssembly): https://emscripten.org/docs/getting_started/downloads.html.
- Graphviz (not strictly necessary, but handy for generating pretty
pictures of, e.g., call graphs): On Ubuntu with
sudo apt install graphvizor in general https://www.graphviz.org/download/.