Relocation is the process of assigning load addresses for position-dependent code and data of a program and adjusting the code and data to reflect the assigned addresses.
Prior to the advent of multiprocess systems, and still in many embedded systems, the addresses for objects were
absolute Absolute may refer to:
Companies
* Absolute Entertainment, a video game publisher
* Absolute Radio, (formerly Virgin Radio), independent national radio station in the UK
* Absolute Software Corporation, specializes in security and data risk manage ...
starting at a known location, often zero. Since multiprocessing systems dynamically link and switch between programs it became necessary to be able to relocate objects using
position-independent code.
A
linker usually performs relocation in conjunction with symbol resolution, the process of searching files and libraries to replace symbolic references or names of
libraries with actual usable addresses in
memory before running a program.
Relocation is typically done by the linker at
link time, but it can also be done at
load time by a relocating
loader, or at
run time by the running program
itself. Some architectures avoid relocation entirely by deferring address assignment to run time; as, for example, in stack machines with
zero address arithmetic or in some segmented architectures where every compilation unit is loaded into a separate segment.
Segmentation
Object files are segmented into various
memory segment types. Example segments include
code segment (.text),
initialized data segment (.data),
uninitialized data segment (.bss), or others.
Relocation table
The relocation table is a list of
pointer
Pointer may refer to:
Places
* Pointer, Kentucky
* Pointers, New Jersey
* Pointers Airport, Wasco County, Oregon, United States
* The Pointers, a pair of rocks off Antarctica
People with the name
* Pointer (surname), a surname (including a list ...
s created by the translator (a
compiler or
assembler) and stored in the object or executable file. Each entry in the table, or "fixup", is a
pointer
Pointer may refer to:
Places
* Pointer, Kentucky
* Pointers, New Jersey
* Pointers Airport, Wasco County, Oregon, United States
* The Pointers, a pair of rocks off Antarctica
People with the name
* Pointer (surname), a surname (including a list ...
to an absolute address in the object code that must be changed when the loader relocates the program so that it will refer to the correct location. Fixups are designed to support relocation of the program as a complete unit. In some cases, each fixup in the table is itself relative to a base address of zero, so the fixups themselves must be changed as the loader moves through the table.
In some architectures a fixup that crosses certain boundaries (such as a segment boundary) or that is not aligned on a word boundary is illegal and flagged as an error by the linker.
DOS and 16-bit Windows
Far
pointer
Pointer may refer to:
Places
* Pointer, Kentucky
* Pointers, New Jersey
* Pointers Airport, Wasco County, Oregon, United States
* The Pointers, a pair of rocks off Antarctica
People with the name
* Pointer (surname), a surname (including a list ...
s (
32-bit
In computer architecture, 32-bit computing refers to computer systems with a processor, memory, and other major system components that operate on data in 32-bit units. Compared to smaller bit widths, 32-bit computers can perform large calculation ...
pointers with
segment:offset, used to address 20-bit 640
KB memory space available to
DOS programs), which point to code or data within a
DOS executable (
EXE), do not have absolute segments, because the actual
address of code/data depends on where the program is loaded in memory and this is not known until the program is loaded.
Instead, segments are relative values in the DOS EXE file. These segments need to be corrected, when the executable has been loaded into memory. The EXE
loader uses a relocation table to find the segments which need to be adjusted.
32-bit Windows
With 32-bit Windows operating systems, it is not mandatory to provide relocation tables for EXE files, since they are the first image loaded into the virtual address space and thus will be loaded at their preferred base address.
For both
DLLs and for EXEs which opt into
address space layout randomization (ASLR), an
exploit
Exploit means to take advantage of something (a person, situation, etc.) for one's own end, especially unethically or unjustifiably.
Exploit can mean:
* Exploitation of natural resources
*Exploit (computer security)
* Video game exploit
*Exploita ...
mitigation technique introduced with
Windows Vista, relocation tables once again become mandatory because of the possibility that the binary may be dynamically moved before being executed, even though they are still the first thing loaded in the virtual address space.
64-bit Windows
When running native 64-bit binaries on Windows Vista and above, ASLR is mandatory, and thus relocation sections cannot be omitted by the compiler.
Unix-like systems
The
Executable and Linkable Format (ELF) executable format and shared library format used by most Unix-like systems allows several types of relocation to be defined.
Relocation procedure
The linker reads segment information and relocation tables in the object files and performs relocation by:
* merging all segments of common type into a single segment of that type
* assigning unique run time addresses to each section and each symbol, giving all code (functions) and data (global variables) unique run time addresses
* referring to the relocation table to modify symbols so that they point to the correct run time addresses.
Example
The following example uses
Donald Knuth's
MIX
Mix, mixes or mixing may refer to:
Persons & places
* Mix (surname)
** Tom Mix (1880-1940), American film star
* nickname of Mix Diskerud (born Mikkel, 1990), Norwegian-American soccer player
* Mix camp, an informal settlement in Namibia
* Mix ...
architecture and MIXAL assembly language. The principles are the same for any architecture, though the details will change.
* (A) Program ''SUBR'' is compiled to produce object file (B), shown as both machine code and assembler. The compiler may start the compiled code at an arbitrary location, often location 1 as shown. Location 13 contains the machine code for the jump instruction to statement ''ST'' in location 5.
* (C) If ''SUBR'' is later linked with other code it may be stored at a location other than 1. In this example the linker places it at location 120. The address in the jump instruction, which is now at location 133, must be relocated to point to the new location of the code for statement ''ST'', now 125.
61 shown in the instruction is the MIX machine code representation of 125
* (D) When the program is loaded into memory to run it may be loaded at some location other than the one assigned by the linker. This example shows ''SUBR'' now at location 300. The address in the jump instruction, now at 313, needs to be relocated again so that it points to the updated location of ''ST'', 305.
49 is the MIX machine representation of 305
See also
*
Linker (computing)
In computing, a linker or link editor is a computer system program that takes one or more object files (generated by a compiler or an assembler) and combines them into a single executable file, library file, or another "object" file.
A simpler ...
*
Library (computing)
*
Object file
*
Prebinding
*
Static library
*
Self-relocation
In computer programming, a self-relocating program is a program that relocates its own address-dependent instructions and data when run, and is therefore capable of being loaded into memory at any address. In many cases, self-relocating code is ...
*
Position-independent code (PIC)
*
Rebasing
*
Garbage collection
*
Pointer swizzling, a lazy form of pointer modification
*
Relocatable Object Module Format
The Relocatable Object Module Format (OMF) is an object file format used primarily for software intended to run on Intel 80x86 microprocessors. Version 4.0 was released by Intel in 1981 under the name ''Object Module Format'', and is perhaps b ...
References
Further reading
*
* (3 pages) (NB. Describes a
relocatable hex format by
Mostek.)
* (8 pages) (NB. Describes a
relocatable hex format by
TDL.)
*
https://web.archive.org/web/20170819173516/http://archive.computerhistory.org/resources/access/text/2016/12/102762506-05-01-acc.pd
Originally presented at: (609 pages). (This "resize" method, named ''page boundary relocation'', could be applied statically to a
CP/M-80 disk image using in order to maximize the
TPA for programs to run. It was also utilized dynamically by the CP/M debugger
Dynamic Debugging Tool (DDT) to
relocate itself into higher memory. The same approach was independently developed by
Bruce H. Van Natta
IMS Associates, Inc., or IMSAI, was a microcomputer company, responsible for one of the earliest successes in personal computing, the IMSAI 8080. The company was founded in 1973 by William Millard and was based in San Leandro, California. Their f ...
of
IMS Associates to produce relocatable
PL/M code. As ''paragraph boundary relocation'',
another variant of this method was later utilized by dynamically
HMA self-relocating
TSRs like
KEYB,
SHARE, and
NLSFUNC under
DR DOS 6.0 and higher. A much more sophisticated and
byte-level granular method based on a somewhat similar approach was independently conceived and implemented by Matthias R. Paul and Axel C. Frinke for their
dynamic dead-code elimination to dynamically minimize the runtime footprint of resident drivers and TSRs (like FreeKEYB).)
*
*
https://www.youtube.com/watch?v=HO6IPpL0y8g] (33 pages)
*
*
*
*
*
* (2+xiv+270+6 pages)
*
*
*
*
*
*
https://archive.org/download/80-microcomputing-magazine-1983-04/80Microcomputing_0483_text.pdf]
*
https://archive.org/download/80-microcomputing-magazine-1985-04/80Microcomputing_0485_text.pdf]
*
https://archive.org/download/the-computer-journal-32/tcj_32_May-June_1988_text.pdf]
*
https://archive.org/download/the-computer-journal-33/tcj_33_July-August_1988_text.pdf]
*
https://archive.org/download/the-computer-journal-34/tcj_34_September-October_1988_text.pd
*
https://archive.org/download/the-computer-journal-54/tcj_54_January-February_1992_text.pd
*
https://archive.org/download/the-computer-journal-55/tcj_55_March-June_1992_text.pdf]
*
{{Executables
Computer libraries
Assignment operations