Pin is a dynamic instrumentation system provided by Intel (http://www.pintool.org),
which allows C/C++ introspection code to be injected at arbitrary places in a running executable. The
injected introspection code is used to observe the behavior of the program, and can be used to write a
variety of tools, including application profilers, memory leak detectors, and trace generators for the IA32,
Intel64 and IA64 (Itanium) platforms, running either Windows or Linux. 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 over 35,000 times, has been cited in over 600 publications, and has over 550 registered
mailing list users.
Tutorial Objective .
The tutorial targets researchers, students, and educators alike, and provides a detailed look at Pin, both
how to use Pin and how Pin works. The tutorial is comprised of four learning components. The first
component provides a brief insight into the workings of Pin, and introduces its fundamental
instrumentation structures and concepts. The second 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 third component will
present some of the more advanced Pin APIs, such as signal interception, multi threaded pin tools. along with mechanisms
for reducing runtime overhead of pin tools. The final component will present methods for writing optimal
Pintools, and outline usages of Pin in Industry and Academia.
Tutorial Schedule .
Part One: Overview, Key Concepts (60 min)
The first part of the tutorial provides an introduction to Pin and its basic API for writing instrumentation
tools (Pintools). Simple Pintools are used to motivate and explain Pin's just-in-time and ahead-of-time
instrumentation features. In addition, we will familiarize the attendees with the various components that
make up a distributed Pin kit.
[15 minute break]
Part Two: Pintools in Detail (60 min)
Pin's largest value comes from its utility in the research community. The tutorial highlights concepts that
appeal to language and compiler researchers: memory leak detectors, race condition detectors, and
profilers. We will wlakthru the memtrace and membuffer tools. We will include concepts that will appeal to
computer architecture researchers: cache simulation, branch prediction, multi-core simulation. Finally, we
include concepts that will appeal to operating systems researchers: multi-process simulation, system call emulation.
[15 minute break]
Part Three: Advanced Pin Usage: Advanced Pin APIs (45 min)
We will present some of the more advanced Pin APIs, and show examples of their usage. Some examples of
these are: signal interception, instruction re-writing, multi threaded pin tools, controlling the Pin
[15 minute break]
Part Four: Advanced Pin Usage: Performance and examples of Pin usage in Industry and Academia (45 min)
Many opportunities exist for optimizing your use of Pin. In this part of the tutorial, we focus on various
tips and tricks for improving instrumentation performance. We also discuss numerous sample applications
of Pin in Industry and Academia
Presenter Bios .
is a Staff Engineer at Intel and has been working in the Pin project for the last 5 years.
Most recently before this, he worked on ia-32el, Intel's dynamic binary translator used for
running IA32 applications on IA64 (Itanium) platforms. Tevi received an M.Sc from Queens
University, Kignston Canada in 1985, and a B.Sc from University of Toronto in 1984.
is a Senior Principal Engineer at Intel and is the original developer of Pin. Previously, he was a
developer of Spike, a post-link optimizer for the Itanium and Alpha processors. He also added
profile-guided optimization to Digital's C compiler for Alpha. Robert received a Ph.D. from Carnegie
Mellon in 1992.