Pin - A Dynamic Binary Instrumentation Tool

Home | News | DownloadsFAQ | NewsgroupPapers | PinPoints | PinPlay

Overview

Pin is a dynamic binary instrumentation framework for the IA-32 and x86-64 instruction-set architectures that enables the creation of dynamic program analysis tools. Some tools built with Pin are Intel Parallel Inspector, Intel Parallel Amplifier and Intel Parallel Advisor. The tools created using Pin, called Pintools, can be used to perform program analysis on user space applications in Linux and Windows. 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.


Distribution

Pin is proprietary software developed and supported by Intel and is supplied free of charge for non-commercial use. 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.


Quick Links

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

Tutorials

For more complete information about compiler optimizations, see our Optimization Notice.

Comments

's picture

I want to know about the pintools.

's picture

I can't see User's Manual. I got "404 not found" error when checked this link:
http://software.intel.com/sites/landingpage/pintool/docs/54730/Pin/html

Doru Adrian Thom P.'s picture

Hi! I was wondering is possible to use pin for parts of code, lets say do a memory traces from a point A in the code to a point B in the code. I am interested in doing memory traces only on some parts of the code

Thank you

Sion Berkowits (Intel)'s picture

Please direct all technical questions or comments on Pin, to the PinHeads newsgroup (see Technical Support, above)

dnyaneshwar  p.'s picture

I am Trying to set up pin pin-2.12-58423-msvc10-windows with visual studio 2012 but it doesn't give me any solution, plz give me the step by step information about this kit how to set up and use it. the error given pinvm.dll does not exist, pinvm already present in pin kit but still it shows such type of errors. I refer pin user guide I cant understand it .............

I also try with Cygwin but doesn't any way to get solution to use this kit.