From arc-probe
Follows pointer chains to navigate nested memory structures in games or software, reading values like entity positions. Validates pointers and debugs failures step-by-step with probe commands.
npx claudepluginhub vzco/arc-probe --plugin arc-probeThis skill uses the workspace's default tool permissions.
Follow a pointer chain to navigate nested data structures.
Maps unknown data structures from memory addresses using hex dumps, RTTI/vtable analysis, pointer dereferencing, field probing, and hardware watchpoints. For C++ reverse engineering.
Reconstruct data structures by analyzing memory access patterns across functions
Solves CTF pwn challenges by discovering and exploiting memory corruption vulnerabilities like buffer overflows, format strings, heap exploits, ROP to read flags.
Share bugs, ideas, or general feedback.
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