Everything about Position-independent code
Machine instruction code that executes properly regardless of where in memory it resides
In computing, position-independent code (PIC) or position-independent executable (PIE) is a body of machine code that executes properly regardless of its memory address. PIC is commonly used for shared libraries, so that the same library code can be loaded at a location in each program's address space where it does not overlap with other memory in use by, for example, other shared libraries. PIC was also used on older computer systems that lacked a Memory Management Unit (MMU), so that the operating system could keep applications away from each other even within the single address space of an MMU-less system. Wikipedia →
🧭 Start here: a 6-step reading path
- Read the overview: Position-independent codeA 5-minute orientation
- Skim a recent paper: Independence of Notaries in Carrying Out Their Position Based on the Notary Position Law and the Notary Code of EthicsInfluential work since 2022
- Pick up a classic book: Objects first with JavaThe most-reprinted book on the subject
- Read the landmark paper: REPICA: Rewriting Position Independent Code of ARMCited 4 times
- Go sideways: Loader (computing)A closely related topic
- Go sideways: Linker (computing)A closely related topic
📖 Definitions
Noun Code that is able to execute correctly regardless of its memory address.
🗂️ The subject at a glance
🏆 Landmark papers (most cited)
REPICA: Rewriting Position Independent Code of ARM
MVX-based mitigation of position-independent code reuse
🆕 Influential since 2022
📚 Books worth reading
Objects first with JavaDavid J. Barnes, Michael Kolling · 2002
Clean CodeRobert C. Martin · 2008
Intelligence Bulletin, G-2, USAFPOAHeadquarters, United States Army Forces Pacific Ocean Areas · 1944
Introduction to linear algebraGilbert Strang · 1998
ApologeticsAlexander Balmain Bruce · 1892
The Conspirators HierarchyJohn Coleman · 1992
Treaty Occupationay ToxicologySuelen Queiroz · 2010
The history of Detroit and MichiganSilas Farmer · 1884
Ranked by number of editions on Open Library, a rough measure of how lasting a book is.
🔗 Related topics
- Loader (computing) In computing, a loader is the part of an operating system that is responsible for loading programs and libraries. It is one of the essential stages in…
- Linker (computing) A linker or link editor is a computer program that combines intermediate software build files such as object and library files into a single executable…
- Relocation (computing) In software development, relocation is the process of assigning load addresses for position-dependent code and data of a program and adjusting the code…
- Dynamic linker A dynamic linker is an operating system feature that loads and links dynamic libraries for an executable at runtime, before or while it is running. Although…
- Shared library A shared library is a library of executable code that is loaded in memory such that multiple executables (programs and other libraries) can use it at runtime…
- Static library A static library or statically linked library contains functions and data that can be included in a consuming computer program at build-time such that…
- Overlay (programming) In a general computing sense, overlaying means "the process of transferring a block of program code or other data into main memory, replacing what is already…
- Dynamic-link library Dynamic-link library (DLL) is Microsoft's implementation of the shared library concept in the Microsoft Windows and OS/2 operating systems. These libraries…