- Инфраструктура: 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 порядок).
36 lines
1.3 KiB
Java
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);
|
|
}
|
|
} |