# Headless post-script: collect all GP-relative references (addr, imm). # Dump as CSV lines "GPREF,," for offline base inference. #@category Analysis listing = currentProgram.getListing() lang = currentProgram.getLanguage() gp = None for r in lang.getRegisters(): if r.getName().lower() == 'gp': gp = r break print('gp register: %s' % (gp.getName() if gp else None)) from ghidra.program.model.scalar import Scalar # noqa: E402 it = listing.getInstructions(True) n = 0 while it.hasNext(): ins = it.next() uses_gp = False for i in range(ins.getNumOperands()): for o in ins.getOpObjects(i): if o == gp: uses_gp = True if not uses_gp: continue imm = None for i in range(ins.getNumOperands()): for o in ins.getOpObjects(i): if isinstance(o, Scalar): imm = o.getSignedValue() break if imm is not None: break print('GPREF,%s,%s' % (ins.getAddress(), imm if imm is not None else '')) n += 1 print('total gp-refs: %d' % n)