Skip to content

jmap_dumper: validate the resolved GUObjectArray against the struct invariants (fixes #30, UE 5.8 empty dumps) - #31

Open
RayVentura wants to merge 2 commits into
trumank:masterfrom
RayVentura:fuobjectarray-validate
Open

RayVentura wants to merge 2 commits into
trumank:masterfrom
RayVentura:fuobjectarray-validate

Conversation

@RayVentura

Copy link
Copy Markdown

On UE 5.8 shipping builds (Dark and Darker build 25384861, and the Spellsided report in #30) patternsleuth resolves GUObjectArray to a neighbouring member of FUObjectArrayObjAvailableListEstimateCount at +0x68 — because 5.8 moved ObjObjects to the front of the struct. The >= 508 gospel layout is right, the base is wrong, so the dumper reads a zeroed struct and writes 0 objects.

This PR validates the resolved address against the struct's own invariants (readable chunk table, 0 < NumElements <= MaxElements, NumChunks == ceil(NumElements / 65536) <= MaxChunks, readable first chunk) and, when it fails, walks ±0x200 in 8-byte steps to the first address that satisfies them, logging the adjustment. User-supplied --guobject-array overrides are never touched.

Verified against the frozen 5.8 game in a sandbox: GUObjectArray pattern resolved to 0x14DFE3468 … using 0x14DFE3400 (-0x68) → 48,599 objects / 7,693 vtables (previously 0 / 0). Offsets checked against Epic's 5.8 UObjectArray.h.

RayVentura added 2 commits September 18, 2026 19:26
…nvariants and walk to the real base when a neighbouring member was matched (UE 5.8 shipping builds resolve to ObjAvailableListEstimateCount, +0x68 — trumank#30)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant