Files
Matiq 25cf786c54 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 порядок).
2026-08-16 18:54:40 +03:00

36 lines
1.3 KiB
Java

import ghidra.app.script.GhidraScript;
import ghidra.program.model.listing.Function;
import ghidra.program.model.symbol.Symbol;
import ghidra.program.model.symbol.SymbolIterator;
import ghidra.program.model.symbol.SymbolType;
public class Diag extends GhidraScript {
@Override
public void run() throws Exception {
int nf = 0;
for (Function f : currentProgram.getFunctionManager().getFunctions(true)) {
nf++;
}
println("FUNCTION_COUNT " + nf);
String[] keys = {"Soothe2", "Spectral", "FilterGraph", "DigitalFilter",
"IIRFilter", "LowPass", "ModuleBase", "Decryptor",
"processBlock", "process"};
SymbolIterator si = currentProgram.getSymbolTable().getAllSymbols(true);
int shown = 0;
while (si.hasNext()) {
Symbol s = si.next();
String name = s.getName(true);
if (name == null) name = s.getName();
if (name == null) continue;
for (String k : keys) {
if (name.toLowerCase().contains(k.toLowerCase())) {
println("SYMB " + name + " " + s.getAddress() + " " + s.getSymbolType());
shown++;
break;
}
}
}
println("SYM_TOTAL " + shown);
}
}