You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Unity support currently guesses layouts: versions from FileVersion thresholds and memory string scans, offsets from four hand-kept eras per backend. A wrong guess is indistinguishable from "not loaded yet" and shows up as an infinite wait.
Some concrete problems:
Unity 2023.x IL2CPP matches no arm of the version detection and falls back to Version::Base, the oldest layout.
Mono version detection on ELF/Mach-O silently defaults to V2 when its string scan misses.
IL2CPP attaches on Windows x64 only; nothing below UnityPointer caches; no nested classes or generic instances.
The plan:
Identify instead of guessing: Mono by the runtime binary's identity (PE debug GUID, ELF build-id, Mach-O UUID), IL2CPP by (Unity version, pointer size), since GameAssembly.dll is compiled per game and has no identity of its own.
Offsets become data: per-build profiles generated offline from Unity's own symbols, compiled into static tables. Supporting a new build is a data drop, not new code.
One shared metadata walk over both runtimes, with a small set of per-runtime operations for where they genuinely diverge.
Module::attach(process, version) goes with the tables on both sides, replaced by attach(process, profile) with public measured profiles. Follow-ups are tracked separately: managed string and collection reads in #149, Linux and Mac Mono builds in #154, the scene manager and time manager rework and engine-shared extraction later.
PRs
In order, each building on the ones before it; every body says what it depends on. #160 stands alone on master.
The Unity support currently guesses layouts: versions from
FileVersionthresholds and memory string scans, offsets from four hand-kept eras per backend. A wrong guess is indistinguishable from "not loaded yet" and shows up as an infinite wait.Some concrete problems:
Version::Base, the oldest layout.V2when its string scan misses.UnityPointercaches; no nested classes or generic instances.The plan:
GameAssembly.dllis compiled per game and has no identity of its own.Module::attach(process, version)goes with the tables on both sides, replaced byattach(process, profile)with public measured profiles. Follow-ups are tracked separately: managed string and collection reads in #149, Linux and Mac Mono builds in #154, the scene manager and time manager rework and engine-shared extraction later.PRs
In order, each building on the ones before it; every body says what it depends on. #160 stands alone on master.