Skip to content

Recognize the Steam 6.483 tune benchmark - #185

Merged
Views2k merged 2 commits into
mainfrom
fix/tune-performance-6483
Nov 8, 2026
Merged

Views2k merged 2 commits into
mainfrom
fix/tune-performance-6483

Conversation

@Views2k

@Views2k Views2k commented Nov 8, 2026

Copy link
Copy Markdown
Owner

Tune Performance results (the game's 60 mph, 100 mph and braking benchmarks on the Tune screen) are read through an exact-build profile: three vtables and seven code guards. The newest profile is for Steam 6.479.874.0 (#177); Steam moved to 6.483.970.0 on November 5, so the Performance tab currently tells every player on the current build to refresh.

Change

A Steam 6.483.970.0 profile in NativeTunePerformanceProfiles, selected by the executable's exact identity (version, length, SHA-256 and image size), and a TunePerformanceTests theory mirroring the 6.479 one.

How the values were established

From a read-only capture of the running 6.483 game (the executable on disk is mostly encrypted, so file analysis is not possible):

  • The three vtables were matched by RTTI class hierarchy (the game randomizes its type names per build, so names were wildcarded and the real .?AV bases kept), object offset, slot count and slot layout, with per-slot code or unwind-data equivalence and an exact local .rdata shift shared with neighbouring vtables. Root page 0x6F1F698 (182 slots, only hierarchy match), tune page 0x6FA4AD0 (174 slots), benchmark 0x6422F48 (19 slots).
  • Six of the seven guards matched uniquely by masked signature against the Store 3.461 live reference (same game revision as Steam 6.461; its guards hash to the shipped Store profile), with identical masked bytes and identical unwind data. The 1884-byte guard indexes a jump table through an image-relative displacement that the masking did not cover; compared function-relative, every instruction and all 13 jump-table entries are equal, and the length and unwind data match. SHA-256 values are of the live 6.483 bytes, which is what NativeTuneLayout.VerifyGuards hashes.
  • Two root-page vtable slots (90 and 136) read different member offsets than the Store 3.461 reference; whether that is a Steam/Store difference or a 6.483 object-layout change could not be settled from encrypted 6.461 Steam disk bytes. Every pointer hop in NativeTunePerformance.TryRead is vtable-checked, so a changed layout makes the read return no result (the behavior on the current build), not a wrong one.

Verification

  • TunePerformanceTests (new theory) passes locally; the whole tune-related selection passed on the 2.7.4 integration build.
  • Not run: the in-game check that benchmark results appear on the Performance tab on 6.483. Planned with the 2.7.4 release candidate; the release note for this item is held until then.
  • Store 3.483.970.0 is not included: its tune-page and benchmark vtables were not relocated yet.

Tune Performance results are read through an exact-build profile of three
vtables and seven code guards. Steam moved to 6.483.970.0 on November 5
and had no profile, so the Performance tab asked every player to refresh.

The 6.483 profile was established from a read-only capture of the running
game: vtables matched by class hierarchy, slot layout and unwind data, and
all seven guards byte-identical to the 6.461 reader with address operands
masked. SHA-256 values are of the live 6.483 bytes.
@Views2k
Views2k merged commit 22766cd into main Nov 8, 2026
10 checks passed
@Views2k
Views2k deleted the fix/tune-performance-6483 branch November 8, 2026 01:04
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