Join our Newsletter — 33% off our NHI Course
Home› Glossary› Architecture & Implementation› Global Offset Table
Architecture & Implementation

Global Offset Table

← Back to Glossary
By NHI Mgmt Group Updated September 25, 2026 Domain: Architecture & Implementation

The Global Offset Table stores addresses used by dynamically linked binaries for external functions and global variables. It acts as the indirection layer between code and the runtime-resolved address, supporting both eager and lazy binding models.

What the Global Offset Table Does

The Global Offset Table, or GOT, is the runtime address table used by dynamically linked programs to reach external functions and global variables. It lets the binary call or read symbols whose final addresses are not fixed until load time.

In practice, the GOT is one half of the indirection path that makes dynamic linking work. The code usually references a table entry, and the dynamic loader fills that entry with the resolved address, either before execution begins or on first use depending on the binding model.

How the GOT Fits Dynamic Linking

The GOT exists because shared libraries and position-independent code cannot assume that a symbol will live at a fixed address. The table gives the program a stable reference point while the actual target address can vary from run to run, process to process, or library to library.

This indirection is what makes relocation manageable. Instead of rewriting every instruction that needs an external symbol, the loader updates selected table entries and the program reads those entries when it needs to transfer control or access data.

Eager Binding, Lazy Binding, and the PLT Relationship

The GOT is closely related to the Procedure Linkage Table, which is used for function calls in many ELF binaries. With eager binding, symbol resolution happens up front and the GOT entry is populated before the program relies on it. With lazy binding, the first call may route through the PLT, which then asks the dynamic loader to resolve the symbol and update the GOT entry.

That split matters because it affects startup cost, call-path behavior, and when addresses become trustworthy. A binary using lazy binding may leave some GOT entries unresolved until they are actually used, while eager binding resolves more of the dependency graph at load time.

Why the GOT Matters for Security and Reverse Engineering

The GOT is a normal part of dynamic linking, but it also creates a high-value target because it controls where indirect calls and global symbol references land. If an attacker can corrupt GOT entries, they can redirect control flow or alter how the program resolves a dependency.

For defenders and analysts, that means GOT behavior is useful in both hardening and triage. It helps explain why position-independent binaries, relocation metadata, and loader behavior are central to understanding exploitability, call redirection, and runtime integrity.

Risk and Threat Considerations

GOT corruption can turn an ordinary memory-write bug into control-flow hijacking, because the table governs the addresses used for indirect calls and symbol access. The risk is greatest when writable relocation targets remain exposed after resolution or when an attacker can influence relocation-related memory.

Failure mechanism: An attacker or buggy overwrite changes a GOT entry, so later calls or accesses resolve to an unintended address instead of the legitimate function or object.

Impact: The result can be code execution, process tampering, crash-only denial of service, or stealthy redirection of program behavior.

Standards & Framework Alignment

This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.

MITRE ATT&CK addresses the attack and risk surface, while NIST SP 800-53 Rev 5, OWASP ASVS and CIS Controls v8 set the governance and control requirements practitioners need to meet.

FrameworkControl / ReferenceRelevance
MITRE ATT&CKT1574 — Hijack Execution FlowGOT overwrite redirects execution through a controlled address.
Recommendation — Map suspicious GOT tampering to Hijack Execution Flow and hunt for control-flow redirection.
NIST SP 800-53 Rev 5SI-10 — Information Input ValidationMemory corruption that alters GOT entries is a validation and integrity failure path.
SI-7 — Software, Firmware, and Information IntegrityGOT integrity is part of preserving executable behavior and runtime trust.
Recommendation — Validate and constrain externally influenced inputs to reduce memory corruption that can alter relocation targets. Apply integrity controls to detect unauthorized changes to executable memory and relocation state.
OWASP ASVSV15 — Secure Coding and ArchitectureSecure binary design and memory safety reduce exploitation paths that target GOT entries.
Recommendation — Design and verify binaries to minimize memory corruption surfaces that can redirect GOT-based control flow.
CIS Controls v8CIS-4 — Secure Configuration of Enterprise Assets and SoftwareBinary hardening and linker configuration are software hardening concerns tied to GOT exposure.
Recommendation — Harden build and runtime configurations to reduce writable relocation and indirect-call abuse.

Practitioner Guidance

What to watch for: Treat GOT-related discussion as a signal to review whether the binary uses modern linker and compiler protections, especially where relocation targets or indirect-call surfaces are exposed. Analysts should also remember that lazy binding can delay symbol resolution, which changes when runtime behavior becomes observable.

Practitioner takeaway: When debugging or securing a dynamically linked binary, the GOT is not just an implementation detail, it is part of the program’s runtime trust boundary.

Deepen Your Knowledge

Sign up to our weekly newsletter — get 33% off our NHI Foundation Level Course

    NHIMG Editorial Note
    Reviewed and updated by the NHIMG editorial team on September 25, 2026.
    NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org