Files
OpenFUT/fifa17-recon/tools/ghidra_queries/q_md_draft_6.py
T

39 lines
1.7 KiB
Python

"""DIMENSION 4 q6: are the GOTO_* tile destinations consumed by native gate code or
only handed to the front-end script layer? And what do the draft/tournament mode-node
factories register?
Hypothesis: GOTO_DRAFT_ONLINE/OFFLINE/DISABLED and GOTO_*TOURNAMENT appear ONLY as
string VALUES passed to the UI property setter in FUN_1800b2680 (no native consumer),
i.e. the destination is dispatched by the packed front-end -> script layer.
Control: GOTO_DRAFT_DISABLED must appear in FUN_1800b2680 (we just read it there).
"""
import traceback
try:
def whereis(lit):
hits = find_all(lit.encode() + b"\x00", (".rdata",))
print("\n--- %r : %d literal hit(s) ---" % (lit, len(hits)))
for h in hits:
xs = xrefs_to(h)
if not xs:
print(" @%#x NO xref (string only referenced by offset math / not a lea target)" % h)
for frm, typ, fn, ent in xs:
print(" @%#x xref from %#x %s in %s (%#x)" % (h, frm, typ, fn, ent))
for s in ("GOTO_DRAFT_ONLINE", "GOTO_DRAFT_OFFLINE", "GOTO_DRAFT_DISABLED",
"GOTO_OFFLINE_TOURNAMENT", "GOTO_ONLINE_CHAMPIONS", "GOTO_OFFLINE_SEASON",
"GOTO_ONLINE_SEASON"):
whereis(s)
# the draft mode-node factories (reference fefifa::FUTOnlineDraftMode / OfflineMode)
for a, lbl in [(0x18006b820, "FUN_18006b820 (FUTOnlineDraftMode node)"),
(0x18006b960, "FUN_18006b960 (FUTDraftOfflineMode node)"),
(0x18006baa0, "FUN_18006baa0 (FUTOfflineTournament node)"),
(0x18006bd20, "FUN_18006bd20 (FUTOnlineTournament node)")]:
d = dec(a)
print("\n=== %s len=%d ===" % (lbl, len(d)))
print(d)
except Exception:
traceback.print_exc()
print("QUERY_DONE")