Add Windows cross-platform gamedata + IMidFuncHook field-path capture
Gamedata (.assets/gamedata/yappershq.sendproxy.jsonc):
- Windows byte-sigs for every resolvable target, each validated by side-by-side
decompile against its Linux twin: EncodeField, WriteFieldList, EncodeInt32,
BitCopyPrimitive (standalone on Win), WriteDeltaEntity_Internal, PerClientEncode,
EncoderRegistry + 7 buckets (table-load lea + "+3 r [+{b*16} d]" factory).
- GetBitRange is inlined on Windows (no standalone entry) — documented with the
alternative capture point; SendClientMessages resolved via refs.strings (array
form, matching ModSharp core.games.jsonc) and is unused by the runtime.
- Corrected the offset-notes block: the three first-pass "mismatches" were all
decompiler misreads — offsets are consistent cross-platform (proven against the
registry-init write into *(fieldInfo+0x38) and the live-working runtime).
Field-path capture (FieldSubstitution.cs):
- Converted from an entry detour on GetBitRange to a mid-function hook
(IMidFuncHook + MidHookContext) for one consistent mechanism on both platforms.
Linux reads the CFieldPath* from ctx.rdi (GetBitRange arg0); Windows reads the
register at the inlined site (SetFieldPathRegister, hardware-validated TODO).
Validated live on Linux (ttt): per-client substitution applies, no crash.
Example: resolve CGlowProperty sub-offsets from the schema at runtime instead of
hardcoding (ISchemaManager.GetNetVarOffset), plus missing usings.
Docs: add docs/FINDING_SIGNATURES.md — a human Ghidra/IDA guide to (re-)deriving
every signature, with the Windows-specific gotchas (ABI, inlining, the PerClientEncode
vs WriteDeltaEntity_Internal trap, the int-encoder-vs-BitCopy dead end).
Known limitation (next): per-client substitution covers the full-update path
(WriteFieldList) but not live delta merges (BuildMergedSerializedEntity uses a
different field-resolution model — global sorted path-table DAT_00577a58 + key search).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> P
Prefix committed
7bec626817eebdc05e199132b46c8554f8f573de
Parent: a10fec7