원클릭으로
identify-class
Identify a C++ class from an object pointer using RTTI and map its vtable
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Identify a C++ class from an object pointer using RTTI and map its vtable
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Full analysis of a single function — disassemble, identify args, find string refs, callers/callees, RTTI, generate signature, label in GUI
Fully analyze a C++ virtual function table — detect params, find string refs, measure sizes, and label all entries
Detect function parameters from prologue and register usage — infer types, count, and calling convention
Discover a C++ class by name via RTTI — map its vtable, disassemble key virtual functions, explore inheritance hierarchy, and label everything
Find all functions that call a given function address — shows argument setup, string refs, and containing function names
Compare a function between sessions — generate a signature, find it after binary update, compare disassembly, report changes
| name | identify-class |
| description | Identify a C++ class from an object pointer using RTTI and map its vtable |
Identify a C++ class from an object pointer using RTTI, then map its vtable.
address (required): Address of the object instance (hex)module (optional): Module name to search withinCheck if it's a C++ object — read the first 8 bytes:
probe_read_pointer address=<addr>
If the value looks like a code address (in the 0x7FF... range), it's likely a vtable pointer. If it's NULL or a small value, this isn't a C++ object (or it hasn't been constructed yet).
Resolve the class name via RTTI:
probe_rtti_resolve address=<addr>
This walks: object -> vtable -> vtable[-1] (COL) -> TypeDescriptor -> mangled name. Returns the demangled class name.
If rtti resolve fails, do it manually:
a. Read vtable pointer: probe_read_pointer address=<addr> → vtable_addr
b. Read COL pointer (vtable - 8): probe_read_pointer address=<vtable_addr - 8> → col_addr
c. Read TypeDescriptor RVA: probe_read_int address=<col_addr + 0xC> → td_rva
d. Get module base from probe_modules
e. Read mangled name: probe_read_string address=<module_base + td_rva + 0x10>
f. Demangle: strip .?AV prefix and @@ suffix → class name
Get the inheritance chain:
probe_rtti_hierarchy class=<class_name> module=<module>
Shows parent classes. Critical for understanding which fields come from which base class.
Map the vtable:
probe_rtti_vtable class=<class_name> module=<module> limit=20
This dumps virtual function entries with first-instruction disassembly previews. Look for:
this+offset or set a fieldjmp to another function): inherited methods that just redirectExplore interesting vtable entries:
probe_disassemble_function address=<vtable_entry>
For small getter functions, you can directly read what offset they access:
mov eax, [rcx+0x354] ; rcx = this, returns field at offset 0x354
ret
This tells you: vtable index N is a getter for field at offset 0x354.
Report:
Class: C_BaseEntity (inherits: CEntityInstance)
Vtable: 0x7FFB23456789 (42 entries)
vtable[0]: 0x7FFB21234000 — destructor
vtable[1]: 0x7FFB21234100 — getter: returns [this+0x354] (int32)
vtable[5]: 0x7FFB21234500 — large function (~0x200 bytes), references "health"
...
Known fields from vtable analysis:
+0x354 int32 (getter at vtable[1])
+0x35C int32 (getter at vtable[3])
Some binaries strip RTTI (/GR- compiler flag). Signs:
rtti scan returns very few or zero types for the module.?AV strings in the module's .rdata sectionFallbacks when RTTI is stripped: