Pin is a dynamic instrumentation system provided by Intel (http://www.pintool.org),
which allows C/C++/assembly introspection code to be injected at arbitrary places in a running executable. The
injected introspection code is referred to as a Pin tool and is used to observe the behavior of the program.
Pin tools can be written to perform various functionalities including application profiling, memory leak detection, security, trace generators for the IA-32 and
Intel64 platforms, running on Windows, Linux, OSX or Android. Pin provides a rich API that abstracts away the underlying
instruction set idiosyncrasies and allows context information such as register contents to be passed to the
injected code as parameters. Pin automatically saves and restores registers that are overwritten by the
injected code so the application continues to execute normally. Pin makes it easy to do studies on
complex real-life applications, which makes it a useful tool not only for research, but also for education.
Pin has been downloaded tens of thousands times, has been cited in over 700 publications, and has about 1000 registered
mailing list users.
The tutorial targets researchers, students, and educators alike, and provides a detailed look at Pin, both
how to use Pin and how Pin works. Participants will obtain a good understanding of the Pin API.
The tutorial is comprised of four learning components. The first
component provides insight into the workings of Pin, and introduces its fundamental
instrumentation structures and concepts thru example Pin tools. The second component will present methods and considerations
for writing optimal Pintools. The third component introduces useful Pin-based tools that are
freely available for download, in particular we will look in detail at the memtrace and membuffer tools,
which implement the instrumentation basis for algorithms which need to examine memory accesses. The fourth component will
present some of the more advanced Pin APIs, such as signal/exception interception, multi-threaded pin tools, Pin interface to debuggers.
Overall 3 hours
Part One: Overview, Key Concepts (60 min)
Part Two: Various topics in Pin API (30 min)
Part Three: Performance, or how to optimize your pintools (30 min)
Part Four: Advanced Pin Usage and APIs (60 min)
Michal Nir Gross is a Software Engineer at Intel and has been working in the Pin project for the last 2 years. Prior to joining the Pin project she worked on Intel's threading analysis tool for .NET.Benjamin Kemper is a Software Engineer at Intel and has been working in the Pin project for the last 2 years. Benjamin works on enabling pin on Unix platforms.