7 Commits
Author SHA1 Message Date
SalastilandClaude Opus 5.5 9506990c95 tus: estimate translation-unit boundaries from .rdata marker tables
Each game object's .rdata starts with a header's static int[5]
{2000,2500,3000,4000,10000}: 261 blocks. config/eqgame/tus.txt maps
each block to the code referencing its own (non-pooled) strings and vtables.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 19:12:15 -04:00
SalastilandClaude Opus 5.5 e2e608841c Match the Monster Alt TU (0x401b42-0x40515d) and its std::list instances
PROGRESSION/BRANCH/TEMPLATE parser over std::istringstream into nested
std::lists; 1.6 KB of parser code plus ~100 STL instances byte-exact.
ReadKeyword is NONMATCHING (block layout).

Findings: the client was compiled with /MT (Dinkumware locking code differs
without _MT). Tools: diff disassembles compiled bytes directly; pair
auto-annotates template/compiler-generated instances by unique byte match,
classifying std:: members as LIBRARY via undname and checking relocations
to tell ICF-folded twins apart.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 12:10:36 -04:00
SalastilandClaude Opus 5.5 ef32db6da9 libscan: classify STL template copies as library code
Compile a probe of common Dinkumware instantiations and find byte-identical
copies in .text (relocations masked; every callee must itself be library/CRT
code). 255 functions reclassified from fn to lib. Known gap: some stringbuf
members (e.g. seekoff 0x40224b) differ slightly from the probe and remain fn.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 23:11:56 -04:00
SalastilandClaude Opus 5.5 b1cc8a1b0d Keep only symbol names proven from the shipped binary
Drop the names taken from an external offset header (functions and
globals), keeping only names the binary itself proves: _WinMain@16 from
the CRT entry call, and Class::Method names from the client's own log
strings. The six functions Ghidra missed stay in the map under neutral
FUN_ names, justified by vtable/pointer references. NAMES.md, README
and ROADMAP no longer point at third-party offset lists.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 23:01:25 -04:00
SalastilandClaude Opus 5.5 9f4e6666b3 Annotation-driven symbols, EH-aware matching, hash-checked link; spell-point TU matched
- // FUNCTION: / GLOBAL: / LIBRARY: annotations in source name symbols, so
  decompiling never needs edits to the shared symbols.txt
- check follows compiler-generated EH handlers into .text$x and verifies
  string literals / float constants by content
- link rebuilds eqgame.exe from compiled objects with relocations resolved
  through the map and checks the SHA1 (currently identical)
- Ghidra pseudo-C export script; docs/ROADMAP.md for the full-relink plan
- /GS confirmed; 0x401022-0x4013e1 (13 functions, spell casting particle
  points) match byte-for-byte

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 22:46:21 -04:00
SalastilandClaude Opus 5.5 a13371f8d0 Name 438 functions/globals from MQ2 Titanium offsets and string xrefs
Seed names from the MacroQuest2 eqgame.h for the Oct 31 2005 10:33:37 build
(version-string address matches this binary), validated against function
starts, plus names proven by self-referencing log strings. Sources,
confidence and unconfirmed candidates in config/eqgame/NAMES.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 22:41:24 -04:00
SalastilandClaude Opus 5.5 bbc4bbfdd5 Matching decomp scaffold for EverQuest Titanium eqgame.exe
MSVC 7.1 (cl 13.10.3077) under Wine, PE/COFF matcher with relocation
verification, side-by-side diff, progress, Ghidra-seeded symbol map
(15,323 functions), and the first three matched functions (/O1).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 22:33:18 -04:00