Pin is a dynamic binary instrumentation framework for the IA-32, x86-64 and MIC instruction-set architectures that enables the creation of dynamic program analysis tools. Some tools built with Pin are Intel® VTune™ Amplifier, Intel® Inspector, Intel® Advisor and Intel® Software Development Emulator (Intel® SDE). The tools created using Pin, called Pintools, can be used to perform program analysis on user space applications on Linux*, Windows* and macOS*. As a dynamic binary instrumentation tool, instrumentation is performed at run time on the compiled binary files. Thus, it requires no recompiling of source code and can support instrumenting programs that dynamically generate code.
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 the registers that are overwritten by the injected code so the application continues to work. Limited access to symbol and debug information is available as well.
Pin was originally created as a tool for computer architecture analysis, but its flexible API and an active community (called "Pinheads") have created a diverse set of tools for security, emulation and parallel program analysis.
Using the LLVM C++ runtime requires Pin Tools to be built with LLVM clang-cl toolset instead of Microsoft MSVC toolset.
Detailed adoption instructions, as well as good practices, are provided in Pin CRT document available in User Documentation section and in Download page.
Examples included in the new kit were fully adopted to use clang-cl. In addition, a Visual Studio C++ project template is provided with MyPinTool example (source\tools\MyPinTool).
Existing MSVC based Pin Kit continues to support C++03 (only).
Pin is provided and supported by Intel, free of charge for any type of use, under the terms of the Intel Simplified Software License (ISSL).
All source code contained in the Pin kit, including scripts, sample code and headers, is governed by the MIT license.
If you have specific questions after reading the user's manual, you can search through the archives of the Pinheads newsgroup to see if anyone else asked your question. If that doesn't solve your problem, feel free to post a message to the newsgroup (don't forget to include your Pin kit number, operating system, processor, and gcc version).
- CGO 2013 [PDF 3.464MB] (February 2013, Shenzhen, China)
- CGO 2012/ISPASS 2012 [PPT 6.7MB] (April 2012 - San Jose, CA and New Brunswick, NJ)
- CGO 2011 [PPT 10.5MB] (April 2011, Chamonix, France)
- CGO 2010 [PPT 7MB] (April 2010, Toronto, Canada)
- Academia Sinica 2009 (May 2009 - Taipei, Taiwan) - Part 1 [PPT 469KB] and Part 2 [PPT 299KB]
- ISCA 2008 (June 2008 - Beijing, China) - Part 1 [PPT 469KB] and Part 2 [PPT 220KB]
- ASPLOS 2008 (March 2008 - Seattle, WA) - Slides [PPT 409KB] and Hands On [PDF 365KB] materials
- PLDI 2007 (June 2007 - San Diego, CA) - Slides [PDF 5.601MB]
Pin - A Binary Instrumentation Tool - Downloads
email@example.com - Newsgroup
Pin - A Binary Instrumentation Tool - Papers
Pin - A Binary Instrumentation Tool - PinPoints
DrDebug: Deterministic Replay based Debugging with Pi