8cba70dc90
- Add 8 files present in docker/fifa17-python/tools but missing from the top-level tree: fut_accounts.py + 7 test_*.py contracts (all committed in the server's docker tree; byte-identical to the running image). - Preserve newer responder work already matching the running container: utas_server.py (offlineSeason), lsx_responder_v2.py (OPENFUT_BIND), blaze_responder_v3b.py, autopatch.py, pow_server.py, fut_store.py, test_fut_contract.py, fifa17-hook-m1.sh. - Add 30 newer ghidra_queries (draft purchase/state, SBC 9-26, runtime registries). Local tree is now a strict superset of B with all shared files byte-identical.
32 lines
974 B
Python
32 lines
974 B
Python
"""Map the sole live category-notifier listener into CardsDLL.
|
|
|
|
Live capture 2026-08-07:
|
|
listener object 0x4216ca48
|
|
listener vtable 0x6ffffc20d6d0
|
|
vtable +0x08 0x6ffffc1e577a
|
|
CardsDLL slide 0x6ffe7c020000
|
|
static method 0x1801c577a
|
|
"""
|
|
|
|
TARGET = 0x1801C577A
|
|
VTABLE = 0x1801ED6D0
|
|
|
|
print("=== live notifier listener method ===")
|
|
target_function = func(TARGET)
|
|
if target_function is None:
|
|
print("no Ghidra function at %#x" % TARGET)
|
|
print("raw PE decoding: jmp [0x1801e5200], imported CRT _purecall")
|
|
else:
|
|
print("containing function:", target_function.getName(),
|
|
hex(int(target_function.getEntryPoint().getOffset())))
|
|
print(dec(TARGET))
|
|
|
|
print("\n=== listener vtable ===")
|
|
for slot, target, name in vtable(VTABLE, 12):
|
|
print("%+#04x %#x %s" % (slot, target, name))
|
|
|
|
print("\n=== method callers/xrefs ===")
|
|
print("callers:", callers(TARGET) if target_function is not None else [])
|
|
for row in xrefs_to(TARGET):
|
|
print(row)
|