b2 live artifacts; click_helper shot verb

This commit is contained in:
alex 2026-09-08 01:18:39 -04:00
parent 2d1a097b07
commit 5b6f812e31
3 changed files with 438 additions and 0 deletions

View file

@ -1,4 +1,5 @@
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
Add-Type @"
using System; using System.Runtime.InteropServices;
public struct RECT { public int L,T,R,B; }
@ -35,6 +36,18 @@ foreach ($line in Get-Content C:\SOTS\ui\cmd.txt) {
'key' { [System.Windows.Forms.SendKeys]::SendWait($p2[1]); Start-Sleep -m 400 }
'type' { [System.Windows.Forms.SendKeys]::SendWait(($line.Substring(5))); Start-Sleep -m 400 }
'sleep' { Start-Sleep -m ([int]$p2[1]) }
'shot' { if ($hw -ne [IntPtr]::Zero) {
$rr = New-Object RECT; [W]::GetWindowRect($hw,[ref]$rr) | Out-Null
$bw = $rr.R - $rr.L; $bh = $rr.B - $rr.T
if ($bw -gt 0 -and $bh -gt 0) {
$bmp = New-Object System.Drawing.Bitmap $bw, $bh
$gg = [System.Drawing.Graphics]::FromImage($bmp)
$gg.CopyFromScreen($rr.L, $rr.T, 0, 0, $bmp.Size)
$bmp.Save($p2[1], [System.Drawing.Imaging.ImageFormat]::Png)
$gg.Dispose(); $bmp.Dispose()
$out += "shot $($p2[1]) ${bw}x${bh}"
} else { $out += "shot: zero-size window" }
} else { $out += "shot: no window" } }
}
}
$sb = New-Object System.Text.StringBuilder 256; [W]::GetWindowTextW([W]::GetForegroundWindow(),$sb,256) | Out-Null

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 KiB

425
verify/traces/b2-shim.log Normal file
View file

@ -0,0 +1,425 @@
23:19:12.629 [tid 5828] ==== sots-engine shim (binkw32 proxy) build 81218c7-dirty-20260908T0312Z ====
23:19:12.629 [tid 5828] exe: C:\SOTS\Sword of the Stars.exe
23:19:12.629 [tid 5828] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=8868 shim=69d00000
23:19:12.629 [tid 5828] addresses: Source: sots-re ghidra/addresses.json @ 73f5f1e, generated 2026-09-07 by tools/gen_addresses.py
23:19:12.629 [tid 5828] config: hooks=trace
23:19:12.676 [tid 5828] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:19:12.676 [tid 5828] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:19:12.676 [tid 5828] hook: MH_Initialize -> MH_OK
23:19:12.676 [tid 5828] hook: MH_CreateHook -> MH_OK (trampoline=01680fe0)
23:19:12.692 [tid 5828] hook: MH_EnableHook -> MH_OK
23:19:12.692 [tid 5828] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:19:12.692 [tid 5828] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=01680fc0)
23:19:12.707 [tid 5828] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
23:19:12.707 [tid 5828] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
23:19:12.707 [tid 5828] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=01680fa0)
23:19:12.723 [tid 5828] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=trace
23:19:12.723 [tid 5828] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=01680f80)
23:19:12.739 [tid 5828] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
23:19:12.739 [tid 5828] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 -> va=012e3030 MH_CreateHook -> MH_OK (trampoline=01680f60)
23:19:12.754 [tid 5828] hook: Game::ServerPlayer::ComputeBudget MH_EnableHook -> MH_OK mode=trace
23:19:12.754 [tid 5828] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
23:19:12.754 [tid 5828] Application::Initialize called (this=036e8128)
23:27:04.364 [tid 700] ==== sots-engine shim (binkw32 proxy) build m2v-3ebc8bf-20260908T0325Z ====
23:27:04.364 [tid 700] exe: C:\SOTS\Sword of the Stars.exe
23:27:04.364 [tid 700] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=8532 shim=69d20000
23:27:04.364 [tid 700] addresses: Source: sots-re ghidra/addresses.json @ 73f5f1e, generated 2026-09-07 by tools/gen_addresses.py
23:27:04.364 [tid 700] config: hooks=trace
23:27:04.426 [tid 700] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:27:04.426 [tid 700] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:27:04.426 [tid 700] hook: MH_Initialize -> MH_OK
23:27:04.426 [tid 700] hook: MH_CreateHook -> MH_OK (trampoline=00570fe0)
23:27:04.442 [tid 700] hook: MH_EnableHook -> MH_OK
23:27:04.442 [tid 700] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:27:04.442 [tid 700] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=00570fc0)
23:27:04.442 [tid 700] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
23:27:04.442 [tid 700] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
23:27:04.442 [tid 700] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=00570fa0)
23:27:04.458 [tid 700] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=trace
23:27:04.458 [tid 700] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=00570f80)
23:27:04.473 [tid 700] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
23:27:04.473 [tid 700] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
23:27:04.473 [tid 700] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00570f60)
23:27:04.489 [tid 700] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
23:27:04.489 [tid 700] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
23:27:04.505 [tid 700] Application::Initialize called (this=02d38128)
23:28:04.768 [tid 4708] ==== sots-engine shim (binkw32 proxy) build m2v-3ebc8bf-20260908T0325Z ====
23:28:04.768 [tid 4708] exe: C:\SOTS\Sword of the Stars.exe
23:28:04.768 [tid 4708] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=6780 shim=6a650000
23:28:04.768 [tid 4708] addresses: Source: sots-re ghidra/addresses.json @ 73f5f1e, generated 2026-09-07 by tools/gen_addresses.py
23:28:04.768 [tid 4708] config: hooks=trace
23:28:04.768 [tid 4708] config: hook.Game::WeaponDictionary::Init=compare
23:28:04.768 [tid 4708] config: hook.Game::SectionDictionary::SectionDictionary=compare
23:28:04.830 [tid 4708] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:28:04.830 [tid 4708] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:28:04.830 [tid 4708] hook: MH_Initialize -> MH_OK
23:28:04.830 [tid 4708] hook: MH_CreateHook -> MH_OK (trampoline=02000fe0)
23:28:04.846 [tid 4708] hook: MH_EnableHook -> MH_OK
23:28:04.846 [tid 4708] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:28:04.846 [tid 4708] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=02000fc0)
23:28:04.862 [tid 4708] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
23:28:04.862 [tid 4708] dict: dictionaries hook ready (crt new=6a5a232b delete=6a5a0174)
23:28:04.862 [tid 4708] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=02000fa0)
23:28:04.862 [tid 4708] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=compare
23:28:04.862 [tid 4708] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=02000f80)
23:28:04.877 [tid 4708] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=compare
23:28:04.877 [tid 4708] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
23:28:04.877 [tid 4708] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=02000f60)
23:28:04.893 [tid 4708] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
23:28:04.893 [tid 4708] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
23:28:04.909 [tid 4708] Application::Initialize called (this=03938128)
23:28:19.879 [tid 4708] dict: [Weapons/_weapons.txt] 123 pairs, 123 loaded, 123 defs, emt_light=0e95dba8
23:40:53.394 [tid 972] ==== sots-engine shim (binkw32 proxy) build m2v-3ebc8bf-20260908T0325Z ====
23:40:53.394 [tid 972] exe: C:\SOTS\Sword of the Stars.exe
23:40:53.394 [tid 972] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=4064 shim=6a650000
23:40:53.394 [tid 972] addresses: Source: sots-re ghidra/addresses.json @ 73f5f1e, generated 2026-09-07 by tools/gen_addresses.py
23:40:53.394 [tid 972] config: hooks=trace
23:40:53.394 [tid 972] config: hook.Game::WeaponDictionary::Init=replace
23:40:53.457 [tid 972] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:40:53.457 [tid 972] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:40:53.457 [tid 972] hook: MH_Initialize -> MH_OK
23:40:53.457 [tid 972] hook: MH_CreateHook -> MH_OK (trampoline=00e60fe0)
23:40:53.472 [tid 972] hook: MH_EnableHook -> MH_OK
23:40:53.472 [tid 972] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:40:53.472 [tid 972] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=00e60fc0)
23:40:53.488 [tid 972] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
23:40:53.488 [tid 972] dict: dictionaries hook ready (crt new=6a5a232b delete=6a5a0174)
23:40:53.488 [tid 972] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=00e60fa0)
23:40:53.504 [tid 972] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=replace
23:40:53.504 [tid 972] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=00e60f80)
23:40:53.519 [tid 972] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
23:40:53.519 [tid 972] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
23:40:53.519 [tid 972] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00e60f60)
23:40:53.519 [tid 972] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
23:40:53.519 [tid 972] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
23:40:53.535 [tid 972] Application::Initialize called (this=01c18128)
23:41:13.965 [tid 972] dict: [Weapons/_weapons.txt] 123 pairs, 123 loaded, 123 defs, emt_light=0e463580
23:49:56.652 [tid 5440] ==== sots-engine shim (binkw32 proxy) build m2v-3ebc8bf-20260908T0325Z ====
23:49:56.652 [tid 5440] exe: C:\SOTS\Sword of the Stars.exe
23:49:56.652 [tid 5440] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=4372 shim=6a650000
23:49:56.652 [tid 5440] addresses: Source: sots-re ghidra/addresses.json @ 73f5f1e, generated 2026-09-07 by tools/gen_addresses.py
23:49:56.652 [tid 5440] config: hooks=trace
23:49:56.699 [tid 5440] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:49:56.699 [tid 5440] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:49:56.699 [tid 5440] hook: MH_Initialize -> MH_OK
23:49:56.699 [tid 5440] hook: MH_CreateHook -> MH_OK (trampoline=01750fe0)
23:49:56.715 [tid 5440] hook: MH_EnableHook -> MH_OK
23:49:56.715 [tid 5440] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:49:56.715 [tid 5440] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=01750fc0)
23:49:56.731 [tid 5440] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
23:49:56.731 [tid 5440] dict: dictionaries hook ready (crt new=6a5a232b delete=6a5a0174)
23:49:56.731 [tid 5440] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=01750fa0)
23:49:56.746 [tid 5440] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=trace
23:49:56.746 [tid 5440] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=01750f80)
23:49:56.762 [tid 5440] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
23:49:56.762 [tid 5440] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
23:49:56.762 [tid 5440] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=01750f60)
23:49:56.777 [tid 5440] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
23:49:56.777 [tid 5440] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
23:49:56.793 [tid 5440] Application::Initialize called (this=03898128)
23:55:39.210 [tid 272] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
23:55:39.210 [tid 272] exe: C:\SOTS\Sword of the Stars.exe
23:55:39.210 [tid 272] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=4844 shim=69c10000
23:55:39.210 [tid 272] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
23:55:39.210 [tid 272] config: hooks=trace
23:55:39.210 [tid 272] config: hook.Shim::SelfTest::Fill=off
23:55:39.210 [tid 272] config: hook.Mars::GlobalConsts::LoadFile=off
23:55:39.210 [tid 272] config: hook.Game::WeaponDictionary::Init=off
23:55:39.210 [tid 272] config: hook.Game::SectionDictionary::SectionDictionary=off
23:55:39.210 [tid 272] config: hook.Game::ServerPlayer::ComputeBudget=off
23:55:39.210 [tid 272] config: hook.Game::TechTree::ProcessResearch=trace
23:55:39.210 [tid 272] config: trace.path=C:\SOTS\shim.trace.jsonl
23:55:39.210 [tid 272] config: trace.inline_max=256
23:55:39.210 [tid 272] config: trace.flush=always
23:55:39.288 [tid 272] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
23:55:39.288 [tid 272] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
23:55:39.288 [tid 272] hook: MH_Initialize -> MH_OK
23:55:39.288 [tid 272] hook: MH_CreateHook -> MH_OK (trampoline=01a60fe0)
23:55:39.304 [tid 272] hook: MH_EnableHook -> MH_OK
23:55:39.304 [tid 272] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
23:55:39.304 [tid 272] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
23:55:39.304 [tid 272] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
23:55:39.304 [tid 272] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
23:55:39.304 [tid 272] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
23:55:39.304 [tid 272] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
23:55:39.304 [tid 272] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=01a60fc0)
23:55:39.319 [tid 272] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
23:55:39.319 [tid 272] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
23:55:39.319 [tid 272] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
23:55:39.335 [tid 272] Application::Initialize called (this=03bf8128)
00:03:41.920 [tid 4460] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
00:03:41.920 [tid 4460] exe: C:\SOTS\Sword of the Stars.exe
00:03:41.920 [tid 4460] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=4868 shim=6a540000
00:03:41.920 [tid 4460] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
00:03:41.920 [tid 4460] config: hooks=trace
00:03:41.920 [tid 4460] config: hook.Shim::SelfTest::Fill=off
00:03:41.920 [tid 4460] config: hook.Mars::GlobalConsts::LoadFile=off
00:03:41.920 [tid 4460] config: hook.Game::WeaponDictionary::Init=off
00:03:41.920 [tid 4460] config: hook.Game::SectionDictionary::SectionDictionary=off
00:03:41.920 [tid 4460] config: hook.Game::ServerPlayer::ComputeBudget=off
00:03:41.920 [tid 4460] config: hook.Game::TechTree::ProcessResearch=compare
00:03:41.920 [tid 4460] config: trace.path=C:\SOTS\shim.trace.jsonl
00:03:41.920 [tid 4460] config: trace.inline_max=256
00:03:41.920 [tid 4460] config: trace.flush=always
00:03:41.982 [tid 4460] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:03:41.982 [tid 4460] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:03:41.982 [tid 4460] hook: MH_Initialize -> MH_OK
00:03:41.982 [tid 4460] hook: MH_CreateHook -> MH_OK (trampoline=00780fe0)
00:03:41.998 [tid 4460] hook: MH_EnableHook -> MH_OK
00:03:41.998 [tid 4460] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:03:41.998 [tid 4460] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:03:41.998 [tid 4460] dict: dictionaries hook ready (crt new=6a49232b delete=6a490174)
00:03:41.998 [tid 4460] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:03:41.998 [tid 4460] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:03:41.998 [tid 4460] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:03:41.998 [tid 4460] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00780fc0)
00:03:42.013 [tid 4460] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=compare
00:03:42.013 [tid 4460] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:03:42.013 [tid 4460] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:03:42.013 [tid 4460] Application::Initialize called (this=00848128)
00:06:39.938 [tid 6648] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
00:06:39.938 [tid 6648] exe: C:\SOTS\Sword of the Stars.exe
00:06:39.938 [tid 6648] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=8500 shim=6a540000
00:06:39.938 [tid 6648] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
00:06:39.938 [tid 6648] config: hooks=trace
00:06:39.938 [tid 6648] config: hook.Shim::SelfTest::Fill=off
00:06:39.938 [tid 6648] config: hook.Mars::GlobalConsts::LoadFile=off
00:06:39.938 [tid 6648] config: hook.Game::WeaponDictionary::Init=off
00:06:39.938 [tid 6648] config: hook.Game::SectionDictionary::SectionDictionary=off
00:06:39.938 [tid 6648] config: hook.Game::ServerPlayer::ComputeBudget=off
00:06:39.938 [tid 6648] config: hook.Game::TechTree::ProcessResearch=compare
00:06:39.938 [tid 6648] config: trace.path=C:\SOTS\shim.trace.jsonl
00:06:39.938 [tid 6648] config: trace.inline_max=256
00:06:39.938 [tid 6648] config: trace.flush=always
00:06:40.000 [tid 6648] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:06:40.000 [tid 6648] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:06:40.000 [tid 6648] hook: MH_Initialize -> MH_OK
00:06:40.000 [tid 6648] hook: MH_CreateHook -> MH_OK (trampoline=00b30fe0)
00:06:40.016 [tid 6648] hook: MH_EnableHook -> MH_OK
00:06:40.016 [tid 6648] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:06:40.016 [tid 6648] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:06:40.016 [tid 6648] dict: dictionaries hook ready (crt new=6a49232b delete=6a490174)
00:06:40.016 [tid 6648] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:06:40.016 [tid 6648] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:06:40.016 [tid 6648] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:06:40.016 [tid 6648] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00b30fc0)
00:06:40.016 [tid 6648] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=compare
00:06:40.016 [tid 6648] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:06:40.016 [tid 6648] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:06:40.031 [tid 6648] Application::Initialize called (this=00e28128)
00:13:48.842 [tid 8156] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
00:13:48.842 [tid 8156] exe: C:\SOTS\Sword of the Stars.exe
00:13:48.842 [tid 8156] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=5772 shim=6a540000
00:13:48.842 [tid 8156] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
00:13:48.842 [tid 8156] config: hooks=trace
00:13:48.842 [tid 8156] config: hook.Shim::SelfTest::Fill=off
00:13:48.842 [tid 8156] config: hook.Mars::GlobalConsts::LoadFile=off
00:13:48.842 [tid 8156] config: hook.Game::WeaponDictionary::Init=off
00:13:48.842 [tid 8156] config: hook.Game::SectionDictionary::SectionDictionary=off
00:13:48.842 [tid 8156] config: hook.Game::ServerPlayer::ComputeBudget=off
00:13:48.842 [tid 8156] config: hook.Game::TechTree::ProcessResearch=replace
00:13:48.842 [tid 8156] config: trace.path=C:\SOTS\shim.trace.jsonl
00:13:48.842 [tid 8156] config: trace.inline_max=256
00:13:48.842 [tid 8156] config: trace.flush=always
00:13:48.951 [tid 8156] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:13:48.951 [tid 8156] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:13:48.951 [tid 8156] hook: MH_Initialize -> MH_OK
00:13:48.951 [tid 8156] hook: MH_CreateHook -> MH_OK (trampoline=00ba0fe0)
00:13:48.967 [tid 8156] hook: MH_EnableHook -> MH_OK
00:13:48.967 [tid 8156] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:13:48.967 [tid 8156] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:13:48.967 [tid 8156] dict: dictionaries hook ready (crt new=6a49232b delete=6a490174)
00:13:48.967 [tid 8156] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:13:48.967 [tid 8156] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:13:48.967 [tid 8156] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:13:48.967 [tid 8156] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00ba0fc0)
00:13:48.982 [tid 8156] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=replace
00:13:48.982 [tid 8156] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:13:48.982 [tid 8156] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:13:48.998 [tid 8156] Application::Initialize called (this=03268128)
00:19:25.684 [tid 1436] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
00:19:25.684 [tid 1436] exe: C:\SOTS\Sword of the Stars.exe
00:19:25.684 [tid 1436] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=8204 shim=6a540000
00:19:25.684 [tid 1436] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
00:19:25.684 [tid 1436] config: hooks=trace
00:19:25.684 [tid 1436] config: hook.Shim::SelfTest::Fill=off
00:19:25.684 [tid 1436] config: hook.Mars::GlobalConsts::LoadFile=off
00:19:25.684 [tid 1436] config: hook.Game::WeaponDictionary::Init=off
00:19:25.684 [tid 1436] config: hook.Game::SectionDictionary::SectionDictionary=off
00:19:25.684 [tid 1436] config: hook.Game::ServerPlayer::ComputeBudget=off
00:19:25.684 [tid 1436] config: hook.Game::TechTree::ProcessResearch=trace
00:19:25.684 [tid 1436] config: trace.path=C:\SOTS\shim.trace.jsonl
00:19:25.684 [tid 1436] config: trace.inline_max=256
00:19:25.684 [tid 1436] config: trace.flush=always
00:19:25.778 [tid 1436] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:19:25.778 [tid 1436] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:19:25.778 [tid 1436] hook: MH_Initialize -> MH_OK
00:19:25.778 [tid 1436] hook: MH_CreateHook -> MH_OK (trampoline=01d50fe0)
00:19:25.794 [tid 1436] hook: MH_EnableHook -> MH_OK
00:19:25.794 [tid 1436] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:19:25.794 [tid 1436] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:19:25.794 [tid 1436] dict: dictionaries hook ready (crt new=6a49232b delete=6a490174)
00:19:25.794 [tid 1436] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:19:25.794 [tid 1436] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:19:25.794 [tid 1436] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:19:25.794 [tid 1436] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=01d50fc0)
00:19:25.809 [tid 1436] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
00:19:25.809 [tid 1436] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:19:25.809 [tid 1436] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:19:25.825 [tid 1436] Application::Initialize called (this=03958128)
00:24:41.962 [tid 7156] ==== sots-engine shim (binkw32 proxy) build b3-b791392-20260908T0353Z ====
00:24:41.962 [tid 7156] exe: C:\SOTS\Sword of the Stars.exe
00:24:41.962 [tid 7156] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=5928 shim=6a540000
00:24:41.962 [tid 7156] addresses: Source: sots-re ghidra/addresses.json @ 1e7428d, generated 2026-09-07 by tools/gen_addresses.py
00:24:41.962 [tid 7156] config: hooks=trace
00:24:42.072 [tid 7156] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:24:42.072 [tid 7156] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:24:42.072 [tid 7156] hook: MH_Initialize -> MH_OK
00:24:42.072 [tid 7156] hook: MH_CreateHook -> MH_OK (trampoline=00e60fe0)
00:24:42.087 [tid 7156] hook: MH_EnableHook -> MH_OK
00:24:42.087 [tid 7156] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:24:42.087 [tid 7156] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=00e60fc0)
00:24:42.103 [tid 7156] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
00:24:42.103 [tid 7156] dict: dictionaries hook ready (crt new=6a49232b delete=6a490174)
00:24:42.103 [tid 7156] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=00e60fa0)
00:24:42.119 [tid 7156] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=trace
00:24:42.119 [tid 7156] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=00e60f80)
00:24:42.134 [tid 7156] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
00:24:42.134 [tid 7156] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:24:42.134 [tid 7156] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00e60f60)
00:24:42.150 [tid 7156] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
00:24:42.150 [tid 7156] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 -> va=012e3030 MH_CreateHook -> MH_OK (trampoline=00e60f40)
00:24:42.165 [tid 7156] hook: Game::ServerPlayer::ComputeBudget MH_EnableHook -> MH_OK mode=trace
00:24:42.165 [tid 7156] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
00:24:42.181 [tid 7156] Application::Initialize called (this=00e78128)
00:36:07.424 [tid 6168] ==== sots-engine shim (binkw32 proxy) build b2-646e4e8-dirty-20260908T0434Z ====
00:36:07.424 [tid 6168] exe: C:\SOTS\Sword of the Stars.exe
00:36:07.424 [tid 6168] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=4412 shim=69a90000
00:36:07.424 [tid 6168] addresses: Source: sots-re ghidra/addresses.json @ 535d1c3, generated 2026-09-08 by tools/gen_addresses.py
00:36:07.440 [tid 6168] config: hooks=trace
00:36:07.440 [tid 6168] config: hook.Shim::SelfTest::Fill=off
00:36:07.440 [tid 6168] config: hook.Mars::GlobalConsts::LoadFile=off
00:36:07.440 [tid 6168] config: hook.Game::WeaponDictionary::Init=off
00:36:07.440 [tid 6168] config: hook.Game::SectionDictionary::SectionDictionary=off
00:36:07.440 [tid 6168] config: hook.Game::ServerPlayer::ComputeBudget=off
00:36:07.440 [tid 6168] config: hook.Game::TechTree::ProcessResearch=trace
00:36:07.440 [tid 6168] config: hook.Game::ServerPlayer::OnTechResearched=trace
00:36:07.440 [tid 6168] config: trace.path=C:\SOTS\shim.trace.jsonl
00:36:07.440 [tid 6168] config: trace.inline_max=256
00:36:07.440 [tid 6168] config: trace.flush=always
00:36:07.503 [tid 6168] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:36:07.503 [tid 6168] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:36:07.503 [tid 6168] hook: MH_Initialize -> MH_OK
00:36:07.503 [tid 6168] hook: MH_CreateHook -> MH_OK (trampoline=00790fe0)
00:36:07.518 [tid 6168] hook: MH_EnableHook -> MH_OK
00:36:07.518 [tid 6168] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:36:07.518 [tid 6168] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:36:07.518 [tid 6168] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
00:36:07.518 [tid 6168] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:36:07.518 [tid 6168] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:36:07.518 [tid 6168] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:36:07.518 [tid 6168] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00790fc0)
00:36:07.518 [tid 6168] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
00:36:07.518 [tid 6168] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f)
00:36:07.518 [tid 6168] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 -> va=01311790 MH_CreateHook -> MH_OK (trampoline=00790fa0)
00:36:07.534 [tid 6168] hook: Game::ServerPlayer::OnTechResearched MH_EnableHook -> MH_OK mode=trace
00:36:07.534 [tid 6168] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:36:07.534 [tid 6168] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:36:07.549 [tid 6168] Application::Initialize called (this=03398128)
00:48:48.598 [tid 8724] ==== sots-engine shim (binkw32 proxy) build b2-646e4e8-dirty-20260908T0434Z ====
00:48:48.598 [tid 8724] exe: C:\SOTS\Sword of the Stars.exe
00:48:48.598 [tid 8724] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=9024 shim=69a90000
00:48:48.598 [tid 8724] addresses: Source: sots-re ghidra/addresses.json @ 535d1c3, generated 2026-09-08 by tools/gen_addresses.py
00:48:48.598 [tid 8724] config: hooks=trace
00:48:48.598 [tid 8724] config: hook.Shim::SelfTest::Fill=off
00:48:48.598 [tid 8724] config: hook.Mars::GlobalConsts::LoadFile=off
00:48:48.598 [tid 8724] config: hook.Game::WeaponDictionary::Init=off
00:48:48.598 [tid 8724] config: hook.Game::SectionDictionary::SectionDictionary=off
00:48:48.598 [tid 8724] config: hook.Game::TechTree::ProcessResearch=off
00:48:48.598 [tid 8724] config: hook.Game::ServerPlayer::ComputeBudget=off
00:48:48.598 [tid 8724] config: hook.Game::ServerPlayer::OnTechResearched=compare
00:48:48.598 [tid 8724] config: trace.path=C:\SOTS\shim.trace.jsonl
00:48:48.598 [tid 8724] config: trace.inline_max=256
00:48:48.598 [tid 8724] config: trace.flush=always
00:48:48.708 [tid 8724] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:48:48.708 [tid 8724] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:48:48.708 [tid 8724] hook: MH_Initialize -> MH_OK
00:48:48.708 [tid 8724] hook: MH_CreateHook -> MH_OK (trampoline=01750fe0)
00:48:48.723 [tid 8724] hook: MH_EnableHook -> MH_OK
00:48:48.723 [tid 8724] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:48:48.723 [tid 8724] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:48:48.723 [tid 8724] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
00:48:48.723 [tid 8724] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:48:48.723 [tid 8724] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:48:48.723 [tid 8724] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:48:48.723 [tid 8724] hook: Game::TechTree::ProcessResearch rva=0x001876c0 mode=off (not installed)
00:48:48.723 [tid 8724] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f)
00:48:48.723 [tid 8724] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 -> va=01311790 MH_CreateHook -> MH_OK (trampoline=01750fc0)
00:48:48.739 [tid 8724] hook: Game::ServerPlayer::OnTechResearched MH_EnableHook -> MH_OK mode=compare
00:48:48.739 [tid 8724] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:48:48.739 [tid 8724] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:48:48.754 [tid 8724] Application::Initialize called (this=01848128)
00:54:42.452 [tid 8724] techfx: ours mode=compare id=10001 granted=10197 plague=0x00 systems_ai=0 civcaps=0 temperance=0x00 bore_changed=0 bore_present=0 roll=0 value=-1
00:55:37.624 [tid 8724] techfx: ours mode=compare id=10010 granted=10197 plague=0x00 systems_ai=0 civcaps=0 temperance=0x00 bore_changed=0 bore_present=0 roll=0 value=-1
00:56:57.374 [tid 8724] techfx: ours mode=compare id=10070 granted=10197 plague=0x00 systems_ai=0 civcaps=0 temperance=0x00 bore_changed=0 bore_present=0 roll=0 value=-1
00:58:06.624 [tid 6332] ==== sots-engine shim (binkw32 proxy) build b2-646e4e8-dirty-20260908T0434Z ====
00:58:06.624 [tid 6332] exe: C:\SOTS\Sword of the Stars.exe
00:58:06.624 [tid 6332] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=2184 shim=69a90000
00:58:06.624 [tid 6332] addresses: Source: sots-re ghidra/addresses.json @ 535d1c3, generated 2026-09-08 by tools/gen_addresses.py
00:58:06.639 [tid 6332] config: hooks=trace
00:58:06.639 [tid 6332] config: hook.Shim::SelfTest::Fill=off
00:58:06.639 [tid 6332] config: hook.Mars::GlobalConsts::LoadFile=off
00:58:06.639 [tid 6332] config: hook.Game::WeaponDictionary::Init=off
00:58:06.639 [tid 6332] config: hook.Game::SectionDictionary::SectionDictionary=off
00:58:06.639 [tid 6332] config: hook.Game::TechTree::ProcessResearch=off
00:58:06.639 [tid 6332] config: hook.Game::ServerPlayer::ComputeBudget=off
00:58:06.639 [tid 6332] config: hook.Game::ServerPlayer::OnTechResearched=replace
00:58:06.639 [tid 6332] config: trace.path=C:\SOTS\shim.trace.jsonl
00:58:06.639 [tid 6332] config: trace.inline_max=256
00:58:06.639 [tid 6332] config: trace.flush=always
00:58:06.764 [tid 6332] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
00:58:06.764 [tid 6332] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
00:58:06.764 [tid 6332] hook: MH_Initialize -> MH_OK
00:58:06.764 [tid 6332] hook: MH_CreateHook -> MH_OK (trampoline=01ae0fe0)
00:58:06.780 [tid 6332] hook: MH_EnableHook -> MH_OK
00:58:06.780 [tid 6332] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
00:58:06.780 [tid 6332] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 mode=off (not installed)
00:58:06.780 [tid 6332] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
00:58:06.780 [tid 6332] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 mode=off (not installed)
00:58:06.780 [tid 6332] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 mode=off (not installed)
00:58:06.780 [tid 6332] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
00:58:06.780 [tid 6332] hook: Game::TechTree::ProcessResearch rva=0x001876c0 mode=off (not installed)
00:58:06.780 [tid 6332] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f)
00:58:06.780 [tid 6332] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 -> va=01311790 MH_CreateHook -> MH_OK (trampoline=01ae0fc0)
00:58:06.796 [tid 6332] hook: Game::ServerPlayer::OnTechResearched MH_EnableHook -> MH_OK mode=replace
00:58:06.796 [tid 6332] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 mode=off (not installed)
00:58:06.796 [tid 6332] selftest: Shim::SelfTest::Fill mode=off checksum=075ef0c3 records=0
00:58:06.811 [tid 6332] Application::Initialize called (this=03a78128)
01:06:30.954 [tid 4352] ==== sots-engine shim (binkw32 proxy) build b2-646e4e8-dirty-20260908T0434Z ====
01:06:30.954 [tid 4352] exe: C:\SOTS\Sword of the Stars.exe
01:06:30.954 [tid 4352] exe base=0x00e80000 (link-time image base 0x00400000, ASLR delta +11010048) pid=8160 shim=69a90000
01:06:30.954 [tid 4352] addresses: Source: sots-re ghidra/addresses.json @ 535d1c3, generated 2026-09-08 by tools/gen_addresses.py
01:06:30.954 [tid 4352] config: hooks=trace
01:06:31.048 [tid 4352] trace: C:\SOTS\shim.trace.jsonl (default mode trace, inline_max 256, flush always)
01:06:31.048 [tid 4352] hook: Mars_Application_Initialize rva=0x004a0e50 -> va=01320e50
01:06:31.048 [tid 4352] hook: MH_Initialize -> MH_OK
01:06:31.048 [tid 4352] hook: MH_CreateHook -> MH_OK (trampoline=00e70fe0)
01:06:31.063 [tid 4352] hook: MH_EnableHook -> MH_OK
01:06:31.063 [tid 4352] cfg: GlobalConsts hook ready (scale constant 0.017453292519943295)
01:06:31.063 [tid 4352] hook: Mars::GlobalConsts::LoadFile rva=0x004b73c0 -> va=013373c0 MH_CreateHook -> MH_OK (trampoline=00e70fc0)
01:06:31.079 [tid 4352] hook: Mars::GlobalConsts::LoadFile MH_EnableHook -> MH_OK mode=trace
01:06:31.079 [tid 4352] dict: dictionaries hook ready (crt new=6adc232b delete=6adc0174)
01:06:31.079 [tid 4352] hook: Game::WeaponDictionary::Init rva=0x0019a4c0 -> va=0101a4c0 MH_CreateHook -> MH_OK (trampoline=00e70fa0)
01:06:31.094 [tid 4352] hook: Game::WeaponDictionary::Init MH_EnableHook -> MH_OK mode=trace
01:06:31.094 [tid 4352] hook: Game::SectionDictionary::SectionDictionary rva=0x00176f40 -> va=00ff6f40 MH_CreateHook -> MH_OK (trampoline=00e70f80)
01:06:31.110 [tid 4352] hook: Game::SectionDictionary::SectionDictionary MH_EnableHook -> MH_OK mode=trace
01:06:31.110 [tid 4352] research: ProcessResearch hook ready (Cost=00ffda00, node=0x34, rng=0x9cc, fpu_cw=0x027f)
01:06:31.110 [tid 4352] hook: Game::TechTree::ProcessResearch rva=0x001876c0 -> va=010076c0 MH_CreateHook -> MH_OK (trampoline=00e70f60)
01:06:31.126 [tid 4352] hook: Game::TechTree::ProcessResearch MH_EnableHook -> MH_OK mode=trace
01:06:31.126 [tid 4352] techfx: OnTechResearched hook ready (regions=15, gate=0/0, fpu_cw=0x027f)
01:06:31.126 [tid 4352] hook: Game::ServerPlayer::OnTechResearched rva=0x00491790 -> va=01311790 MH_CreateHook -> MH_OK (trampoline=00e70f40)
01:06:31.141 [tid 4352] hook: Game::ServerPlayer::OnTechResearched MH_EnableHook -> MH_OK mode=trace
01:06:31.141 [tid 4352] hook: Game::ServerPlayer::ComputeBudget rva=0x00463030 -> va=012e3030 MH_CreateHook -> MH_OK (trampoline=00e70f20)
01:06:31.157 [tid 4352] hook: Game::ServerPlayer::ComputeBudget MH_EnableHook -> MH_OK mode=trace
01:06:31.157 [tid 4352] selftest: Shim::SelfTest::Fill mode=trace checksum=075ef0c3 records=1
01:06:31.173 [tid 4352] Application::Initialize called (this=039b8128)