Skip to content

Glossary

Global Offset Table (GOT)

The table of resolved runtime addresses for imported functions; writable under lazy binding, which makes it a target for redirecting calls.

The Global Offset Table (GOT) holds the runtime addresses of imported functions and global data. Calls to an imported function jump to a Procedure Linkage Table (PLT) stub, which reads the function's real address from its GOT entry and jumps there. With lazy binding, entries are resolved on first use, so the GOT must be writable at runtime.

That writability is what a GOT-overwrite attack abuses: an arbitrary write that changes one entry redirects the next call through it, for example turning puts into system. Full RELRO resolves all imports at startup and remaps the GOT read-only, turning such a write into an immediate fault. See hijacking the GOT.