Follow a pointer chain to navigate nested data structures step by step
Follow a pointer chain to navigate nested data structures.
address (required): Starting address (hex)chain (required): Comma-separated offsets describing the chain (e.g., "0x30,0x10,0x354")Games and complex software store data in nested structures:
GlobalPtr -> EntityList -> Entity[i] -> GameSceneNode -> Position (Vec3)
Each arrow is a pointer dereference. To read the position, you:
Use probe_read_chain for a single call:
probe_read_chain address=<start> offsets=[0x30, 0x10, 0x354]
This follows each offset: dereference at start+0x30, dereference at result+0x10, read value at result+0x354.
If the chain fails, break it down step by step to find where it breaks:
probe_read_pointer address=<start> ; read vtable/first ptr at base
probe_dump address=<start> size=128 ; overview of the base struct
probe_read_pointer address=<start+0x30> ; follow first offset
probe_dump address=<result> size=128 ; overview of second struct
probe_read_pointer address=<result+0x10> ; follow second offset
probe_read_int address=<result+0x354> ; read final value
Validate each link — at each step, check:
Entity via index:
EntityList + 0x10 -> ChunkArray
ChunkArray + (chunk_index * 8) -> Chunk
Chunk + (entry_index * stride) -> EntityIdentity
EntityIdentity + 0x0 -> Entity pointer
Object hierarchy:
Entity + 0x330 -> GameSceneNode
GameSceneNode + 0xC8 -> AbsOrigin (Vec3, read 12 bytes as 3 floats)
GameSceneNode + 0x103 -> bDormant (1 byte, 0 = active)
Controller -> Pawn resolution:
Controller + 0x6BC -> m_hPawn (CHandle, 4 bytes)
handle & 0x7FFF = entity_index
Resolve via entity list to get pawn pointer
Pawn + 0x354 -> m_iHealth
rtti find <classname> <module> to find it, then rtti vtable to get the vtable layoutprobe_dump at the start of a struct shows the memory layout — pointers and integers are visually distinct in hex