2.7 KiB
2.7 KiB
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. Seedecomp/Agent_Release_x64/evidence.mdandcpp/classes.hpp. - Observed (markers only): the other 15 EXEs. The RTTI, C++ EH and MSVCP100
checks were run with
stringsandobjdumpon 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 inthird-party/tinyxml-2.5.3/. - ATL:
CAtlExceptionand related classes.
Application code conventions (observed in Agent)
- Class prefixes are
Magi*/MG*/MB*, for exampleMagiAgentServer,MGAgentManagerSessionandMBCLog.- The singletons use the
MBISingleton<T>template. - The timer class is
Magi::Timer.
- The singletons use the
- Inter-server RMI interfaces live in namespaces named
<FROM>2<TO>_PROTOCOL, for exampleAGENT2AGENTMANAGER_PROTOCOL. Each generatedProxy/Stubclass is wrapped in theRNPnamespace. - 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.