Crusader_Decomp/pyghidra_plans/inspect_4588_refs.py

34 lines
1.2 KiB
Python
Raw Permalink Normal View History

from ghidra.program.model.symbol import RefType
TARGETS = {0x4588, 0x458A}
def format_addr(addr):
return addr.toString()
listing = program.getListing()
function_manager = program.getFunctionManager()
reference_manager = program.getReferenceManager()
seen = set()
for target in TARGETS:
addr = program.getAddressFactory().getDefaultAddressSpace().getAddress(target)
print(f"TARGET {format_addr(addr)}")
refs = reference_manager.getReferencesTo(addr)
iterator = refs.iterator() if hasattr(refs, "iterator") else refs
for ref in iterator:
from_addr = ref.getFromAddress()
function = function_manager.getFunctionContaining(from_addr)
key = (str(from_addr), str(addr))
if key in seen:
continue
seen.add(key)
instruction = listing.getInstructionContaining(from_addr)
code_unit = listing.getCodeUnitContaining(from_addr)
text = instruction.toString() if instruction is not None else code_unit.toString()
function_name = function.getName() if function is not None else "<no function>"
print(f" FROM {format_addr(from_addr)} {function_name} {ref.getReferenceType()} {text}")