Skip to content

Releases: K4ryuu/IDA-Source2Forge

Release v1.0.1 - 2026.08.04

Choose a tag to compare

@K4ryuu K4ryuu released this 04 Aug 13:38

[1.0.1] - 2026-08-04

Fixed

  • The rename offer came back on every load even with nothing left to name. A handler shared by two commands can only carry one name, so whichever command lost saw a cmd_ name that was not its own and reported itself pending forever. ent_fire and ent_fire_output share a dispatcher on cs2 libserver.so, which is exactly that case. One claimant owns the name now, picked by name rather than by scan order so a game update cannot flip it, and the others stop asking.
  • The handler count in the log was wrong: every handler that already carried the right name was renamed to that same name again and counted as work, so a run that changed nothing reported 354 renames. It now leaves an already correct name alone, the way the pending count always did.
  • nullsub_ was not recognised as an IDA generated name, so command handlers that are empty stubs were mistaken for names an analyst had set and never got their cmd_ name. Two of them on cs2 libserver.so.

Changed

  • The rename dialog only lists what it will actually name. Rows sitting at zero are left out, and the sentence about the registration constructors moved below the list. At the list indent it read like a fourth item that had lost its count.

Release v1.0.0 - 2026.08.03

Choose a tag to compare

@K4ryuu K4ryuu released this 03 Aug 18:52

[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 lea that loads it. Ambiguous sites are skipped rather than guessed. Handlers are named cmd_<command>, 339 of 356 on a cs2 server.dll and 353 of 355 on libserver.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 becomes ConCommand::ConCommand, the accessor most variables are read through becomes ConVarData::Value, and the shared typed getters on top of it become ConVarRefAbstract::GetFloat, GetBool, GetInt and GetString. 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.