Pin - A Dynamic Binary Instrumentation Tool

Home | News | Downloads | FAQ | Newsgroup | Papers | XED | SDE | PinPoints | PinPlay | DrDebug


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.


Pin is proprietary software developed and supported by Intel and is supplied free of charge for non-commercial use. Pin is given under the End User License Agreement for the Intel ® Software Development Products, section 2.2 License for Noncommercial License Types. Pin includes the source code for a large number of example instrumentation tools like basic block profilers, cache simulators, instruction trace generators, etc. It is easy to derive new tools using the examples as a template.

Getting Started

The best way to get started is to read the user's manual. Pin developers also regularly organize tutorials and workshops. They are held at conferences and universities.

Technical Support

If you have specific questions after reading the user's manual, you should first check the FAQ page. If that doesn't answer your question, you can search through the archives of the Pinheads newsgroup to see if anyone else asked your question. Finally, 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).

User's Manual


  • 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]
For more complete information about compiler optimizations, see our Optimization Notice.



it can compiled success if use shm_open/shmat function with pintool on macOS, and add "TOOL_LIBS += -lpthread" to Makefile,  but it run error:

pin -t obj-intel64/libpin.dylib  -- ls 
E: Unable to load obj-intel64/libpincov.dylib

it can load normally only if don't set TOOL_LIBS. how to solve it?

Hi, team , I would like to have instruction instrumentation in specific moudle in Windows . Such as an executable's main module , in which way, I can improve the performance of the Application that I instrumented. Could you help me out ?


To run with -pid, run your application and save the pid ,

then run: pin -pid <pid> -t <pintool>

and Pin will attach to the specified pid.

Hi Team,

I have been using Intel Pin based Pin tools on Red Hat Linux Distribution. But I am not able to get pin working on OpenWRT based Linux distribution. Is there any limitation of using Pin on particular distribution? Does Pin has a dependency on particular Kernal module that should have been build along image of linux?

OS Version -> 3.12.59-intelce-standard, gcc version 4.8.3

Basically, executing pin on above linux version, I see nothing. Even following default message is not coming up on executing pin:

E: Missing application name
Pin 2.14
Copyright (c) 2003-2015, Intel Corporation. All rights reserved.
Usage: pin [OPTION] [-t <tool> [<toolargs>]] -- <command line>
Use -help for a description of options


Regard, Vikrant kapila

Hi, we are studying an open source tool based Pin tool version 2.2 for linux developed by a professor almost 10 years ago, so we need the version 2.2 of Pin tool for Linux. And where we can download this version?
Thank you!

Pin 76691 for Linux/GCC comes with some Windows specific examples, like ChildProcess.


We are trying to use Intel PIN on OS X 10.10 (Yosemite). Around a year back, Intel used to distribute a PIN version pin-2.13-62732-clang.4.2-mac that used to work on OS X platform. However, we do not this version being distributed now, and nor is any version specific to the OS X platform. Is it the case that Intel has merged the tarballs of OS X and Linux together? If not, then has Intel completely discontinued its support for the OS X platform?

We tried installing the two PIN (linux) versions that are available on Intel PIN's download page: 

  1. 2.14-67254 (available on the Download page)
  2. 3.0-76991 (available on the Download page)

Our platform details are: OS X 10.10 (Yosemite), Clang compiler (6.1.0), GNU Make (3.81)

While Intel PIN's 2.14-67254 has been shown to be compatible only with the older versions of OS X (really old ones I must say), 3.0-76991 has been shown to be compatible with OS X 10.10. We are facing some basic issues with this version too (while running the make in source/tools/ManualExamples): 

  1. In source/tools/Config/makefile.config file, TARGET_OS is set to linux and COMPILER is set to gcc. This should be set based on the platform. We have fixed this file manually. 
  2. The Makefile in the source/tools/ManualExamples does not compile saying that the cc_used_ia32e_m.CVH file could not be found. Note that this file used to be shipped with pin-2.13-62732-clang.4.2-mac.
  3. The pin executable in the root folder of Pin's tarball is for Linux (does not work on OS X).

PS: We are using Intel PIN as a feeder to our architectural simulator Tejas. Hence, our simulator has a dependency on Intel PIN's support. If you have recently stopped releasing newer versions of Intel PIN, could you at least allow interested users to download the older (pin-2.13-62732-clang.4.2-mac)  version on your Downloads page. 

Hi !

I wonder whether the Pin tool could collect the memory trace of Java Application, such as Hadoop Application, and I am  looking forward to your reply.



please any one tell me how to connect pin tool with eclipse I am using Windows Xp and MinGW compiler please help me


Add a Comment

Have a technical question? Visit our forums. Have site or software product issues? Contact support.