re: the +184 writer is blocked - and xrefs.ind_call is a CROSS PRODUCT, not a call graph

Chasing what supplies the EX_ mode word. Two routes, both measured to have no
power, plus one structural fact that did come out.

The offset route is dead. stw ..., 184(rN) occurs 301 times in the image, lwz
from +184 occurs 351 times, and 115 functions touch both +144 and +184. +184 is
an ordinary small offset shared by many unrelated classes - the same shape the
corpus already recorded as failing three times. Nothing narrows to a writer.

The bigger result is an instrument refutation with corpus-wide reach. Asking
xrefs for the callers of the two screens returns 633 sources for EACH, and the
two lists are IDENTICAL, which cannot be right. Measuring the relation itself:

  ind_call rows                       1827297
  distinct targets                       1710
  distinct sources                       6992
  targets with EXACTLY 633 sources        236

236 different functions sharing an identical source count is the signature of an
unresolved-indirect-call cross product, not of a call graph. Any reading that
treats an ind_call edge as "X calls Y" is void, here and anywhere else in the
corpus it may have been used.

The control shows the other kinds are sound: sub_82286BC8 has exactly one
caller, kind call. And both EX_ screens have ZERO non-ind_call edges - they are
reached only through function pointers, which is why the direct graph is empty
for them.

What did come out: scanning the entries of all 1150 catalogued vtables in the
flat .pe, both EX_ screens are slot 1 of their own class - sub_822814D8 in
ANON_Class_271D5F25 and sub_8227A3A0 in ANON_Class_CAA8AD62 - while sub_82286BC8
is in no catalogued vtable at all. So the 2/0/0/1 partition from the previous
commit reflects a structural difference rather than a coincidence: the two
screens that select on the mode word are vtable methods of their own classes and
the one that does not select is not a vtable method.

Still not settled: what writes +184. Both the offset sweep and the call graph are
exhausted for it. A route with actual power would be the RTTI behind those two
anonymous classes, or a runtime watch on the field - not another static offset
search.

All seventeen artefacts byte-identical.
This commit is contained in:
Sylpheed RE agent
2026-08-28 11:08:18 +00:00
parent 35a35f753f
commit 749567e835
2 changed files with 82 additions and 0 deletions

View File

@@ -6912,3 +6912,32 @@ kind from `CHALLENGE` in the game's own vocabulary.
⚠️ **Boundary**: `EXTRA = 3` is established at `+144` of the stage-loader class;
the word tested here is at `+184` of `[obj+4]`. Same constant, two offsets —
**that they are the same field is not shown**.
---
## 🔴❌ 2026-08-28 — the `+184` writer is blocked; and `xrefs.ind_call` is a CROSS PRODUCT
Item (a). Two routes to "what supplies the `EX_` mode word", both measured to
have no power.
**Offset route dead**: `stw …,184(rN)` occurs **301×**, `lwz` from `+184`
**351×**, and **115 functions touch both `+144` and `+184`**. `+184` is an
ordinary small offset — the same trap the corpus already paid for three times.
❌❌ **`xrefs.ind_call` IS A CROSS PRODUCT — NEVER READ IT AS "X CALLS Y".**
Callers of the two screens come back as **633 sources each, identical lists**.
The relation itself: **1 827 297 `ind_call` rows** over **1 710 targets** ×
**6 992 sources**, and **236 targets have *exactly* 633 sources**. That is an
unresolved-indirect-call cross product. ⚠️ Any past or future reading that treats
an `ind_call` edge as a real caller is void. Control: `sub_82286BC8` has exactly
**1** caller of kind `call`, so the direct kinds are sound; both `EX_` screens
have **0** non-`ind_call` edges.
**What did come out**: scanning the 1 150 vtables' entries in the flat `.pe`,
**both `EX_` screens are slot 1 of their own class**`sub_822814D8` in
`ANON_Class_271D5F25`, `sub_8227A3A0` in `ANON_Class_CAA8AD62` — while
`sub_82286BC8` is in no catalogued vtable at all. The 2/0/0/1 partition reflects
a structural difference, not a coincidence.
🔴 **Blocked**: the `+184` writer. Next route with power = the RTTI behind those
two anonymous classes, or a runtime watch — **not** another static offset search.