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

42 lines
1.8 KiB
Python

"""DIMENSION 4 q3: do the draft/tournament MODE-STATE literals have native gating
callers, or are they inert descriptor names driven from the script layer?
Hypothesis: like the Seasons CompetitionManager setters (FUN_180101680/1801016c0,
zero callers), the draft/tournament mode nodes are named descriptors with no native
entry-gate; entry is decided in the packed front-end. Test by reading the xref
callers of each mode-state literal and decompiling the first native caller of each.
Control: 'NOSEASONS' xref is known (FUN_180057330). Re-confirm the Seasons setters
have zero callers as the reference negative.
"""
import traceback
try:
def xr(a, label):
print("\n--- %s @ %#x ---" % (label, a))
xs = xrefs_to(a)
for frm, typ, fn, ent in xs:
print(" from %#x %s in %s (%#x)" % (frm, typ, fn, ent))
return xs
xr(0x1801fbb50, "fefifa::FUTDraftOfflineMode")
xr(0x1801fbbc8, "fefifa::FUTOnlineDraftMode")
xr(0x180209a70, "CentralDraftModeOffline")
xr(0x180209ae0, "CentralDraftModeOnline")
xr(0x1801ebca0, "draftentry")
xr(0x1801fbbe8, "fefifa::FUTOfflineTournament")
xr(0x1801fbc08, "fefifa::FUTOnlineTournament")
xr(0x180218f18, "FUT::TournamentInfo")
xr(0x18021f870, "DraftMode(0x18021f870)")
xr(0x1801fbbd9, "DraftMode(0x1801fbbd9)")
# Seasons CompetitionManager control: setters + singleton
print("\n=== CONTROL: Seasons CompetitionManager setters callers ===")
for a in (0x180101680, 0x1801016c0):
print("callers(%#x) = %s" % (a, callers(a)))
print("xrefs_to DAT_1802e6328 (CompetitionManager singleton):")
for frm, typ, fn, ent in xrefs_to(0x1802e6328):
print(" from %#x %s in %s (%#x)" % (frm, typ, fn, ent))
except Exception:
traceback.print_exc()
print("QUERY_DONE")