Find CBaseEntity_CollisionRulesChanged
Locate CBaseEntity_CollisionRulesChanged in CS2 server.dll or libserver.so using IDA Pro MCP tools.
Method
1. Get CBaseEntity_SetOwner Function Info
ALWAYS Use SKILL /get-func-from-yaml with func_name=CBaseEntity_SetOwner.
If the skill returns an error, stop and report to user.
Otherwise, extract func_va for the next step.
2. Decompile CBaseEntity_SetOwner and Extract VTable Offset
Decompile CBaseEntity_SetOwner using func_va from step 1:
mcp__ida-pro-mcp__decompile addr="<func_va>"
Look for the very last virtual call in the decompiled code:
__int64 __fastcall CBaseEntity_SetOwner(__int64 a1, _QWORD *a2)
{
//at the end of the function body, there is a very last virtual call - CBaseEntity_CollisionRulesChanged
(*(void (__fastcall **)(_DWORD *))(*(_QWORD *)a1 + 1480LL))(a1);
Extract the vtable offset from this last virtual call (e.g., 1480). This is the CBaseEntity_CollisionRulesChanged vtable offset.
Calculate:
- VTable Offset: The value from the pattern (e.g., 1480 = 0x5C8)
- VTable Index: offset / 8 (e.g., 1480 / 8 = 185)
Also note the inst_addr — the address of this virtual call instruction (shown as a comment like /*0x180c0c3b4*/ in the decompiled output).
3. Generate vfunc offset signature for CBaseEntity_CollisionRulesChanged
ALWAYS Use SKILL /generate-signature-for-vfuncoffset to generate a robust and unique signature for CBaseEntity_CollisionRulesChanged, with inst_addr and vfunc_offset from step 2.
4. Write Analysis Results as YAML
ALWAYS Use SKILL /write-vfunc-as-yaml to write the analysis results for CBaseEntity_CollisionRulesChanged.
Required parameters:
func_name:CBaseEntity_CollisionRulesChangedfunc_addr:None(this is a virtual call target, not a directly resolved function)func_sig:Nonevfunc_sig:<vfunc_sig>from step 3
VTable parameters:
vtable_name:CBaseEntityvfunc_index: The vtable index from step 2 (e.g., 185)vfunc_offset: The vtable offset from step 2 (e.g., 0x5C8)
VTable Information
- VTable Name:
CBaseEntity::vftable'` - VTable Mangled Name (Windows):
??_7CBaseEntity@@6B@ - VTable Mangled Name (Linux):
_ZTV11CBaseEntity - VTable Index: 185 - This can change when game updates.
- VTable Offset: 0x5C8 (185 * 8 = 1480) - This can change when game updates.
- Note that for
libserver.so, the first 16 bytes of "vftable" are for RTTI. The real vftable =_ZTV11CBaseEntity+0x10.
Output YAML Format
The output YAML filename depends on the platform:
server.dll→CBaseEntity_CollisionRulesChanged.windows.yamllibserver.so→CBaseEntity_CollisionRulesChanged.linux.yaml
func_name: CBaseEntity_CollisionRulesChanged
vfunc_sig: FF 90 C8 05 00 00 48 8B 5C 24 ?? 48 8B 74 24 ?? 48 8B 7C 24 ?? 48 83 C4 ?? 41 5E C3 48 89 5C 24 ??
vtable_name: CBaseEntity
vfunc_offset: 0x5c8
vfunc_index: 185
DLL Information
- DLL:
server.dll(Windows) /libserver.so(Linux)
Notes
CBaseEntity_CollisionRulesChangedis a virtual function called as the very last operation insideCBaseEntity_SetOwner. When the owner entity changes, this function is invoked to notify the collision system that collision rules need to be re-evaluated.- The function is identified indirectly through the virtual call in
CBaseEntity_SetOwner, sofunc_va,func_rva,func_size, andfunc_sigare not included in the YAML output. - The
vfunc_sigcaptures the virtual call instruction pattern including the displacement bytes for the vtable offset.