Tutorial: LLVM for Security Practitioners

At the 2021 IEEE Secure Development Conference (SecDev 2021)
9:00 AM - 12:00 PM, Monday, October 18
Zoom webinar room: 918 5489 7202
(See SecDev Attendees Schedule for Zoom password and Slack info; conference registration required)

John Criswell, Ethan Johnson, and Colin Pronovost
University of Rochester, Department of Computer Science

→ Click here for tutorial slides ←

In this tutorial session, you will learn how to write a pass in LLVM to instrument loads and stores during compilation of a program.

You will need:

1) A computer on which you can run a virtual machine during the tutorial session

2) Some familiarity with the C++ programing language

LLVM is written in modern C++, and C++ is the primary language used for writing passes and other software that works with LLVM. Bindings existing for using LLVM in other languages, but the native C++ interface is the most flexible and well-maintained, so we will be using that in this tutorial.

To get the most out of this tutorial, you should:

3) A development environment for writing LLVM passes

Getting a development environment set up for writing your own LLVM passes isn't too hard in theory, but it can take a fair amount of time (LLVM+Clang is a large codebase and can take over an hour to compile from source) and might be a bit daunting for those unfamiliar with the LLVM ecosystem. Since we'll be walking you through working with LLVM during the live tutorial, we've prepared a pre-canned Linux-based virtual machine image with a ready-to-go development environment for you to participate in the tutorial.

→ You can download the virtual machine image and read instructions on how to use it here. ←
(Note: the instructions and VM say "2019" on them since they are unchanged from an earlier version of the tutorial. This is the correct version to use for the 2021 tutorial.)

After you've completed the tutorial, we'd greatly appreciate it if you could fill out a brief (1-page) survey on your experience, so we can improve future versions of this tutorial:

→ Post-Tutorial Feedback Survey ←

Page © 2019-2021 Ethan Johnson