Content deleted Content added
m Fix links to disambiguation page Proprietary |
Jerryobject (talk | contribs) m Per Wikipedia Style Manual: corrected punctuation of unprintworthy terms, heading capitalization; removed excess punctuation; defined initialism; changed instances of passive voice to active. |
||
Line 2:
| developer = [[Intel]]
| latest release version = 2.8
| latest release date = {{release date|11|03|2010
| operating_system = [[Linux]]
| platform = [[
| genre = [[
| license = [[Proprietary software|Proprietary]],
| website = [http://www.pintool.org/ www.pintool.org]
}}
'''Pin''' is a dynamic binary [[
The tools created using Pin, called Pintools, can be used to perform program analysis on [[user space]] applications in [[Linux]] and [[Windows]]<ref>[http://www.cs.virginia.edu/kim/docs/ispass10.pdf Dynamic Program Analysis of Microsoft Windows Applications]</ref>
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.
Line 19:
==Overview==
Pin performs instrumentation by taking control of the program just after it loads into memory. It then [[
Pin is a platform for the creation of analysis tools. A pin tool comprises instrumentation, analysis and callback [[routine|routines]]. Instrumentation routines are called when code that has not yet been recompiled is about to be run, and enable the insertion of analysis routines. Analysis routines are called when the code they are associated with is run. Callback routines are called when specific conditions are met, or when a certain event has occurred. Pin provides an extensive [[Application Programming Interface|API]] for instrumentation at many abstraction levels, from a single instruction to an entire binary module. It also supports callbacks for many events such as library loads, system calls, signals/exceptions and thread creation events.▼
▲Pin is a platform for
== Features ==
=== Instrumentation
Pin supports two modes of instrumentation called JIT mode and Probe mode. JIT mode supports all the features of Pin, while Probe mode supports a limited feature set but is much faster, adding almost no overhead to program running time. JIT mode uses a just-in-time compiler to recompile all program code and insert instrumentation, while Probe mode uses [[
=== Platform independence ===
Pin was designed
=== Optimizations ===
Pin uses many techniques to optimize instrumentation and analysis code, using techniques such as [[Inline function|inlining]], [[liveness analysis]] and smart [[register spilling]]. Pin performs these optimizations automatically whenever possible, without requiring the user to insert any extra code to allow inlining. Naturally, some optimizations still require user hints, and some code structures are easier to inline than others. Direct linking of jitted code sections, a technique called ''trace linking'', and ''register binding reconciliation'', which minimizes register spilling and remapping, are also used.
===Ease of
Pin’s API and implementation are focused on making pin tools easy to write. Pin takes full responsibility for assuring that the instrumentation code from the pin tool does not affect the application state. Also, the API enables the instrumentation code to request many pieces of information from Pin. For example, the instrumentation code in the pin tool can use the Pin API to get the memory address being accessed by an instruction, without having to examine the instruction in detail.
Line 63 ⟶ 61:
== External Links ==
* [http://www.pintool.org/ Pin
* [http://tech.groups.yahoo.com/group/pinheads/ Pinheads], a mailing list for the Pin users community
|