Developer(s) | Intel |
---|---|
Stable release | 2.10 / November 2011, 28 |
Operating system | Linux, Windows |
Platform | IA-32, x86-64 |
Type | Instrumentation framework, Profiler |
License | Proprietary, free, but you cannot redistribute Pin or pintool binaries |
Website | www.intel.com/software/pintool |
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[1]. 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 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 with a kit of reference tools.
Contents |
Pin performs instrumentation by taking control of the program just after it loads into memory. It then just-in-time recompiles (JIT) small sections of binary code just before they are run. New instructions, which perform the analysis, are added to the recompiled code. These new instructions come from the Pintool. A large array of optimization techniques are used to obtain the lowest possible running time and memory use overhead. As of June 2010, Pin's average base overhead is 30 percent (without running a pintool)[2].
Pin is a platform for creating analysis tools. A pin tool comprises instrumentation, analysis and callback 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 one 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 supports two modes of instrumentation called JIT mode and Probe mode. JIT mode supports all features of Pin, while Probe mode supports a limited feature set but is far 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 code trampolines for instrumentation.
Pin was designed for tool portability, and despite JIT compiling from one ISA to the same ISA (and not using a single intermediate representation for all code), most of its APIs are architecture and operating system independent. It was also designed to be portable itself, carefully isolating platform-specific code from generic code, allowing the fast adaptation of Pin to new platforms. Approximately half of the code is generic and the rest is either architecture or OS dependent.[3]
Pin uses many techniques to optimize instrumentation and analysis code, using techniques such as inlining, liveness analysis and smart register spilling. Pin performs these optimizations automatically whenever possible, without needing users 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.
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 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.
There are many Pintools that are used for varying tasks.
A computer program is a collection of instructions that performs a specific task when executed by a computer. A computer requires programs to function, and typically executes the program's instructions in a central processing unit.
A computer program is usually written by a computer programmer in a programming language. From the program in its human-readable form of source code, a compiler can derive machine code—a form consisting of instructions that the computer can directly execute. Alternatively, a computer program may be executed with the aid of an interpreter.
A part of a computer program that performs a well-defined task is known as an algorithm. A collection of computer programs, libraries and related data are referred to as software. Computer programs may be categorized along functional lines, such as application software or system software.
The earliest programmable machines preceded the invention of the digital computer. In 1801, Joseph-Marie Jacquard devised a loom that would weave a pattern by following a series of perforated cards. Patterns, including flowers and leaves, could be weaved and repeated by arranging the cards.
Program (American spelling) or programme (British spelling) may refer to:
Program management or programme management is the process of managing several related projects, often with the intention of improving an organization's performance. In practice and in its aims it is often closely related to systems engineering and industrial engineering.
The program manager has oversight of the purpose and status of the projects in a program and can use this oversight to support project-level activity to ensure the program goals are met by providing a decision-making capacity that cannot be achieved at project level or by providing the project manager with a program perspective when required, or as a sounding board for ideas and approaches to solving project issues that have program impacts. In a program there is a need to identify and manage cross-project dependencies and often the project management office (PMO) may not have sufficient insight of the risk, issues, requirements, design or solution to be able to usefully manage these. The program manager may be well placed to provide this insight by actively seeking out such information from the project managers although in large and/or complex projects, a specific role may be required. However this insight arises, the program manager needs this in order to be comfortable that the overall program goals are achievable.
A program is a set of instructions used to control the behavior of a machine, often a computer (in this case it is known as a computer program).
Examples of programs include:
The execution of a program is a series of actions following the instructions it contains. Each instruction produces effects that alter the state of the machine according to its predefined meaning.
While some machines are called programmable, for example a programmable thermostat or a musical synthesizer, they are in fact just devices which allow their users to select among a fixed set of a variety of options, rather than being controlled by programs written in a language (be it textual, visual or otherwise).
The term "computer", in use from the early 17th century (the first known written reference dates from 1613), meant "one who computes": a person performing mathematical calculations, before electronic computers became commercially available. "The human computer is supposed to be following fixed rules; he has no authority to deviate from them in any detail." (Turing, 1950) Teams of people were frequently used to undertake long and often tedious calculations; the work was divided so that this could be done in parallel.
The first time the term "Computer" appeared in The New York Times was February 3, 1853; an obituary stated:
Since the end of the 20th century, the term "human computer" has also been applied to individuals with prodigious powers of mental arithmetic, also known as mental calculators.
The approach was taken for astronomical and other complex calculations. Perhaps the first example of organized human computing was by the Frenchman Alexis Claude Clairaut (1713–1765), when he divided the computation to determine timing of the return of Halley's Comet with two colleagues, Joseph Lalande and Nicole-Reine Lepaute.
This is a list of characters from the Cartoon Network animated series, Courage the Cowardly Dog.
Courage is the series' protagonist, and an overly frightened purple beagle dog who lives in Nowhere, Kansas. He was abandoned as a puppy after his parents were sent into outer space, but was adopted by Muriel Bagge. Her husband, Eustace, regularly mistreats him. Ironically, given his name, Courage is a genuine coward, but still goes to great lengths to protect his owners; to the end, he often gets injured, sometimes quite brutally, or almost killed and only surviving through his determination and/or pure luck. Despite his cowardice, Courage is very clever and resourceful when the situation demands it, outsmarting the villains most of the time. Aiding him at saving the day is a self-aware, sarcastic and seemingly omniscient Computer that he keeps in the attic with which he could consult for information in how to remedy any predicament he faces (though it never fails to badmouth him in one way or another). He got his name when Muriel found him as a puppy alone in an alley and remarked that he must be quite brave to be there by himself.