The offset shown is 0 , but that's a placeholder. The linker fixes it. e9 00 00 00 00 means "jump to the next instruction" (an infinite loop if you don't patch).
Instead of a hardcoded distance, the target address is pulled from a memory location
The CPU loads CS with 0x08 (usually a privilege level 0 code segment in protected mode) and EIP with 0x00401000 . x86 jmp opcode
Each has a unique primary opcode.
In the vast ecosystem of x86 assembly language, no instruction is more fundamental—or more misunderstood—than JMP . At its core, the JMP (Jump) instruction does one simple thing: it breaks the sequential flow of execution and transfers control to another instruction address. Yet, beneath this simplicity lies a complex encoding scheme that has evolved over four decades, from the Intel 8086 to modern AMD64 architectures. The offset shown is 0 , but that's a placeholder
This jumps to a function’s entry in the Global Offset Table (GOT). The first time, it points back to a resolver; afterward, it points to the actual function.
These are harder for the CPU to predict, as the destination can change. This is why "Virtual Functions" in C++ or "Interface methods" in Java have a slight performance overhead—they rely on indirect jumps. Instead of a hardcoded distance, the target address
In the sprawling landscape of computer architecture, the processor is often viewed as a calculating engine—a device that crunches numbers, adds integers, and moves data. While accurate, this view overlooks the processor's true nature: it is a machine of flow control. Without the ability to change course, a CPU would be nothing more than a glorified calculator, executing a linear list of instructions from boot to shutdown.