from ghidra.program.model.listing import CodeUnit from ghidra.program.model.symbol import SymbolTable, SymbolType, SourceType from ghidra.program.model.data import DataUtilities program = getCurrentProgram() listing = program.getListing() symtab = program.getSymbolTable() def p(*a): out = ",".join(str(x) for x in a) print(out) # 1. functions count funcs = listing.getFunctions(True) n = 0 for f in funcs: n += 1 p("FUNCTION_COUNT", n) # 2. symbols matching DSP keywords import re keys = ["Soothe2", "Spectral", "FilterGraph", "DigitalFilter", "IIRFilter", "LowPass", "ModuleBase", "Decryptor", "processBlock", "ProcessData"] syms = symtab.getAllSymbols(True) shown = set() for s in syms: name = s.getName(True) or s.getName() for k in keys: if k.lower() in name.lower(): key = (name, str(s.getAddress()), s.getSymbolType().toString()) if key not in shown: shown.add(key) p("SYMB", name, s.getAddress(), s.getSymbolType().toString()) break p("SYM_TOTAL", len(shown)) # 3. exports for s in symtab.getExternalSymbols(): pass # external functions imports (VST exports / DLL imports of interest) for f in listing.getFunctions(True): sym = f.getSymbol() if sym is not None and sym.isExternalEntryPoint(): p("EXP", f.getName(), f.getEntryPoint())