Files
BFM-decomp/docs/duplicates.resident.md
T
Drew T 03978ec4ba feat(phase-10): T4 — resident Ghidra program (2nd binary) + symbol seed + sig
- tools/ghidra_import_raw.sh (NEW): raw-blob importer (BinaryLoader + --loader-baseAddr +
  PSX:LE:32:default) — the Gen2 counterpart to ghidra_import.sh (PS-X-EXE only); reusable for
  Phase-13 location overlays. Imports the resident blob as program 'resident' @0x800CEDF8.
- tools/ghidra_scripts/DefineFunctions.java (NEW): seed splat's validated entry points
  (.run/<prog>_funcs.txt) — raw-binary auto-analysis finds only the reachable subset (23/143);
  this defines all 143 (created=120/existed=23/failed=0). R9-verified 143 funcs persisted.
- FINDING: DetectPsyQ reports the resident is PsyQ 4.7.0 (the EXE is 4.0.0); the lone in-range
  PsyQ-signature hit is DsMix (libsnd -> resident holds the sound driver). 4.7 .LIBs DEFERRED to
  Phase 11 start (Drew); carried to PhaseEnd Notes. Phase 10 needs nothing from 4.7.
- config/symbols.resident.txt: seed DsMix (R13 candidate, 4.0-sig vs 4.7 blob — confirm in Phase 11);
  stacked under symbols.us.txt, applied on re-extract -> resident still 8e17e02f BYTE-IDENTICAL (R22),
  main still 143dbb89 (no regression)
- Makefile: per-binary GHIDRA_PROG -> 'make sig-refresh BINARY=resident' (.run/sig.resident.jsonl)
- dup_report.resident now real (6 byte-identical intra-resident groups — Phase-11 dedup fodder)
- ghidra DB committed (R23, MCP stopped): new resident program 00000003.* (+ main db.15->16 no-op)
2026-06-15 23:25:00 -06:00

1.5 KiB

EXE-wide duplicate function groups (generated by tools/dup_report.py)

sig: .run/sig.resident.jsonl sha1=6218cf30f9722fa4784733a73945a370ea10810c (296 funcs, 122 with nins>=8)

Match the representative once -> share the body to the duplicates (h_exact = guaranteed

byte-match; h_norm = same source, re-point any single address constant).

h_exact (byte-identical) — nins>=8: 6 groups, 6 redundant (collapsible)

score nins count representative duplicates
62 31 2 FUN_800d2e6c (0x800d2e6c) 0x800d3120
28 14 2 FUN_800d065c (0x800d065c) 0x800d0694
18 9 2 FUN_800d2dfc (0x800d2dfc) 0x800d2f8c
18 9 2 FUN_800d2ee8 (0x800d2ee8) 0x800d319c
16 8 2 FUN_800cefb0 (0x800cefb0) 0x800cf398
16 8 2 FUN_800d3328 (0x800d3328) 0x800d3398

h_norm (structural) — nins>=8: 9 groups, 15 redundant (collapsible)

score nins count representative duplicates
75 15 5 FUN_800d2f0c (0x800d2f0c) 0x800d2fb0 0x800d30c8 0x800d31c0 0x800d31fc
62 31 2 FUN_800d2e6c (0x800d2e6c) 0x800d3120
52 26 2 FUN_800d21c4 (0x800d21c4) 0x800d222c
40 8 5 FUN_800cefb0 (0x800cefb0) 0x800cf398 0x800d30a8 0x800d3328 0x800d3398
30 15 2 FUN_800d3238 (0x800d3238) 0x800d3348
28 14 2 FUN_800d065c (0x800d065c) 0x800d0694
22 11 2 FUN_800d1028 (0x800d1028) 0x800d109c
18 9 2 FUN_800d2dfc (0x800d2dfc) 0x800d2f8c
18 9 2 FUN_800d2ee8 (0x800d2ee8) 0x800d319c