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

30 lines
1.2 KiB
Python

"""DIMENSION 4 q7 (Q2 rigor): trace the three draft settings atoms 0xf9/0xfa/0xff
through the settings deser FUN_18013c6d0 to struct fields, and through the applier
FUN_18011dc50 to gate bytes +0x1fd3d / +0x1fd3e. Also enumerate ALL native readers
of the two draft gate bytes to confirm the tile builder is the only consumer.
Control: applier must contain a write to +0x1fd2e gated on (field==1) (IS_TRADING,
established). Print applier + deser in full (lengths printed) to avoid truncation.
"""
import traceback
try:
d = dec(0x18011dc50)
print("=== applier FUN_18011dc50 len=%d ===" % len(d))
print(d)
d2 = dec(0x18013c6d0)
print("\n=== settings deser FUN_18013c6d0 len=%d ===" % len(d2))
print(d2)
# native readers of the two draft gate bytes: scan .text for movzx/cmp/mov disp32
import struct as _s
print("\n=== raw disp32 sites for 0x1fd3d and 0x1fd3e in .text ===")
for disp in (0x1fd3d, 0x1fd3e):
pat = _s.pack("<i", disp)
hits = find_all(pat, (".text",))
for h in hits:
fn = fname(h)
print(" disp %#x referenced @%#x in %s" % (disp, h, fn))
except Exception:
traceback.print_exc()
print("QUERY_DONE")