add architecture details and more third-party lib details

This commit is contained in:
Benjamin Palko 2026-10-14 16:42:18 -04:00
parent 39e86f667f
commit baac905ef2
83 changed files with 17657 additions and 1 deletions

53
docs/ARCHITECTURE.md Normal file
View file

@ -0,0 +1,53 @@
# Architecture — Rusty Hearts server binaries
What is known about how the shipped server binaries are built and structured.
Each claim is marked **observed**, **inference**, or **unknown** (see AGENTS.md).
## Implementation language: C++
All 16 server executables in `binaries/` are written in **C++**, compiled with
**MSVC 2010** (Visual C++ 10) for Windows x64.
| Marker | Why it implies C++ | Where seen |
|---|---|---|
| MSVC RTTI type descriptors (`.?AV…@@`), including templates | Emitted only for C++ polymorphic classes | All 16 EXEs (161–1,035 each) |
| `__CxxFrameHandler3` import | C++ exception-handling runtime | All 16 EXEs |
| `MSVCP100.dll` import (`std::` streams/containers) | C++ standard library, VS2010 | All 16 EXEs |
| Linker version 10, `MSVCR100.dll` | VS2010 toolchain (matches `vcrun2010` dependency) | Agent (checked) |
| vftables, `operator new/delete`, multiple vftables per class | Virtual dispatch, multiple inheritance | Agent (decompiled) |
Status:
- **Observed (decompiled):** `Agent_Release_x64.exe`. See
`decomp/Agent_Release_x64/evidence.md` and `cpp/classes.hpp`.
- **Observed (markers only):** the other 15 EXEs. The RTTI, C++ EH and MSVCP100
checks were run with `strings` and `objdump` on 2026-10-14; they have not been
decompiled yet.
- **Unknown:** the support DLLs are a mix. OpenSSL and curl are C, BugTrap is
C++, and the proprietary DLLs are unchecked (see `third-party/README.md`).
Implications for decompilation:
- Ghidra produces C-like pseudocode. C++ structure is not recovered
automatically. Recover it from RTTI and vftables (`decomp/scripts/VTableMap.java`).
- No PDBs are shipped, so method names, signatures and data members are
unknown unless reconstructed.
## Statically linked libraries (observed in Agent; others unchecked)
- **ProudNet** (Nettention, proprietary): networking and RMI. Headers are local-only; see `third-party/README.md`.
- **TinyXML** 2.5.x (inference: 2.5.1–2.5.3, from its error table). XML
config parsing (`TiXml*` classes); present in 14 of 16 EXEs. Source is in
`third-party/tinyxml-2.5.3/`.
- **ATL**: `CAtlException` and related classes.
## Application code conventions (observed in Agent)
- Class prefixes are `Magi*` / `MG*` / `MB*`, for example `MagiAgentServer`,
`MGAgentManagerSession` and `MBCLog`.
- The singletons use the `MBISingleton<T>` template.
- The timer class is `Magi::Timer`.
- Inter-server RMI interfaces live in namespaces named
`<FROM>2<TO>_PROTOCOL`, for example `AGENT2AGENTMANAGER_PROTOCOL`. Each
generated `Proxy` / `Stub` class is wrapped in the `RNP` namespace.
- Config is XML under `option\*.xml`.
- Whether the other servers share this framework is an **inference**, based on
their names and similar RTTI counts. It is unverified.