Release v1.0.0 - 2026.08.03
[1.0.0] - 2026-08-03
First release.
Added
- Registration constructor discovery: name strings are followed to the call that consumes them, and the function collecting the most of those calls is treated as a candidate. No addresses, signatures or game builds are hardcoded.
- Argument profiling: every call site of a candidate is read back to learn which slot carries the object, the name, the flags, the description and the callback. SysV and MS x64 are both handled, including the fifth argument MS x64 spills to
[rsp+20h]. - ConVar and ConCommand separation: decided per constructor from whether its objects are ever used after registration, not from a name pattern.
- Automatic renaming: every registered global gets named after the variable it holds (
cvar_sv_cheats,ccmd_bot_add), with the description written back as a repeatable comment. Names an analyst set by hand are left alone. - Rename offer on load: fires once autoanalysis is finished, and works on a reopened database where the analysis event never runs again.
- FCVAR flag decoding: bit-to-name pairs are read out of the binary itself, merged with an hl2sdk cs2 reference table. Names found in the binary win.
- Use site browser: every reference to a variable's object outside its registration, with the containing function and the accessor it feeds.
- Prefix learning: the seed prefix list only has to find one constructor, whose call sites then supply the prefixes this binary really uses.
- Engine gate: nothing is scanned unless the binary carries Source 2 markers.
- Command handler recovery: SysV passes the callback in a register, MS x64 buries it in a stack delegate and only passes a pointer, so that one is read back from the
leathat loads it. Ambiguous sites are skipped rather than guessed. Handlers are namedcmd_<command>, 339 of 356 on a cs2server.dlland 353 of 355 onlibserver.so. - Engine function naming: the ConVar registration core is found through the call graph rather than the argument shape and becomes
ConVarRefAbstract::Register, the command constructor becomesConCommand::ConCommand, the accessor most variables are read through becomesConVarData::Value, and the shared typed getters on top of it becomeConVarRefAbstract::GetFloat,GetBool,GetIntandGetString. Per type wrappers and anything else keep their address name. - JSON and CSV export for both views.
- Duplicate detection: the compiler emits these small engine functions once per translation unit, so copies are matched by opcode sequence and given the same name.
- IDC functions (
Source2Forge_Scan,Source2Forge_Uses,Source2Forge_Rename,Source2Forge_Rescan) for scripted access from IDAPython.
Files
| File | Description |
|---|---|
src/main.cpp |
Plugin entry, actions, menu and the load-time rename offer |
src/convar_detect.h |
Constructor discovery, argument profiling, validation, extraction |
src/convar_uses.h |
Use site collection and the variable/command vote |
src/convar_flags.h |
FCVAR bit names, read from the binary with a reference fallback |
src/convar_naming.h |
Object naming and description comments |
src/convar_chooser.h |
Both list views and the use site browser |
src/convar_export.h |
JSON and CSV writers |
src/convar_idc.h |
IDC function registration |
src/convar_types.h |
Shared structures |
tests/test_idc_export.py |
Shape checks over the IDC surface, run inside IDA |
Platforms
Windows x64, Linux x64, Linux ARM64, macOS x64, macOS ARM64.