2.8 KiB
2.8 KiB
P0 — binary fingerprint
Target: Sword of the Stars.exe (GOG Complete Collection v1.8.1, build 19833), 7.5 MB,
extracted via innoextract to /srv/re-lab/sots-game/.
PE / toolchain
- PE32, i386 (32-bit), subsystem Windows GUI 5.01, 5 sections, ImageBase
0x00400000, SizeOfImage0x007b3000, entry0x00925794. - Compiler: MSVC 2010 (VC++ 10.0) — MajorLinkerVersion 10; imports
MSVCR100.dll+MSVCP100.dll. Resolves the earlier VS2003/2005/2008 uncertainty. Implications: RTTI present (C++ class hierarchy recoverable), MSVC-2010 name mangling (Ghidra demangles), VS2010 Dinkumware STL — expect heavily inlinedstd::vector/map/string. - COFF characteristics
0x12F→ includesIMAGE_FILE_LARGE_ADDRESS_AWARE (0x20): LAA is already enabled in this build. The 2 GB→4 GB mitigation is baked in; the memory ceiling only needs allocator work if large-battle crashes still occur.RELOCS_STRIPPEDset (so the ASLR flag in DllCharacteristics0x8140is effectively inert).
Imported subsystems (from the import table)
- Graphics: DirectX 9 —
d3d9.dll+d3dx9_42.dll(D3DX June 2010). Anchor for the renderer:Direct3DCreate9→CreateDevice→ present loop. - Audio:
DSOUND.dll(DirectSound). Video:binkw32.dll(RAD Bink). - Net:
WSOCK32.dll+IPHLPAPI.DLL(multiplayer). - Std Win32: KERNEL32, USER32, GDI32, ADVAPI32, SHELL32, SHLWAPI, WINMM, ole32.
Data
sots.gob(1.45 GB) +sots_local_en.gob(599 MB) — renamed uncompressed ZIPs (per community docs); openable directly. Modding is./Mods/override.
Consequences for the plan
- Battle-load becomes the primary bug target (LAA already done).
- The RTTI analyzer should hand us the class hierarchy — the fastest path into the object model (goal #1), to be cross-referenced with the community save-editor structs.
- D3D9 device init is a clean, well-anchored first renderer target.
Fingerprint captured 2026-09-07 via objdump on CT111.
Update — RTTI reality + scale (2026-09-07)
- RTTI is fully present: 1,924 type descriptors, 41,411 functions. RTTI was not
stripped. Full class inventory extracted →
findings/objects/00-inventory.md. - Engine namespace is
Mars(SOTS1's engine; SOTS2 later used Mercury); game logic inGame. 194 Mars (engine) classes, 1,404 Game classes, 179 serializable types. - Ghidra's headless RTTI analyzer ran but produced 0
SymbolType.CLASSnamespaces on our query — a ReVa/Ghidra tooling detail to resolve (re-run/point the right analyzer); the RTTI data itself is intact and was read straight from the binary. - Consequence: the object model (goal #1) is strongly de-risked — named classes + hierarchy hints
come free from RTTI;
serializable-types.txtmaps closely to the save data model.