LOGBOOK

HELP

Quiz Entry - updated: 2026.07.06

What does jmp * (indirect jump) do and where does it appear?

The * means "indirect": jmp *addr reads the target address from memory (or a register) and jumps to whatever it finds there, rather than to a fixed label.

Indirect jump: compute .L4 + %rdi*8, read 8 bytes from the table, jump to that target; used by switch tables, function pointers, and C++ vtables

* jmp * reads its target from memory (table + index*8) or a register, then jumps there — the mechanism behind switch tables, function pointers, and vtable dispatch. *

# Direct: jump to fixed address
jmp .L_label

# Indirect: jump to address stored at [table + rdi*8]
jmp *.L4(,%rdi,8)

Breaking down jmp *.L4(,%rdi,8):

  1. Compute address: .L4 + %rdi * 8
  2. Read 8 bytes from that address — this is the target
  3. Jump to the target

Where it appears:

  • Switch statements — jump through a jump table
  • Function pointerscall *%rax calls the function pointed to by %rax
  • Virtual dispatch (C++) — call *offset(%rax) calls through vtable

Examine in GDB:

(gdb) x/a 0x402500

Shows the address stored at that location — the actual jump target.

Go deeper:

From Quiz: REVE1 / Assembly Patterns & GDB | Updated: Jul 06, 2026