Initial commit: soothe2 RE workspace + roadmap
- Инфраструктура: RTTI-дампы (rtti_dsp/full.json), декомпиляции DSP-классов (decomp_*.txt), Ghidra-скрипты (Dump*.java, ImportRtti*.java, Diag.java), depthcurve/curve_fits LUT. - Поведенческая модель sim_v5.py + sim.py (RMSE ~0.3dB), утилиты (measure, tt_sweep, patchparam, sweep, harness_*, verify_sim). - summary.md + roadmap.md (контракт из manual M1-M12, топология пайплайна из OCR, фазы A-C). - pipeline_ocr.txt: OCR диаграммы Appendix A (mid/side ручка, trim/mix/bypass порядок).
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user