Files
Drew T 36a366ba3f chore(phase-1): install RE stack + headless import (PsyQ 4.0.0, MCP live)
- WSL RE stack installed: JDK 21.0.11, Ghidra 12.1 PUBLIC, GhidrAssistMCP
  v2.8.0, ghidra_psx_ldr 2026.06.04 (extensions extracted into
  Ghidra/Extensions/ at version=12.1; exact-12.1 pin held, no version-lock)
- headless import of extracted/SLUS_007.26: PSX loader auto-selected
  (PSX:LE:32:default), PsyQ Version = 4.0.0 recorded, 1726 functions,
  saved to ghidra/bfm.{gpr,rep} (gitignored)
- GhidrAssistMCP headless server verified on 127.0.0.1:8080 (41 tools);
  get_code(0x80018730) returns the LZSS streaming decompressor
  (milestone substance, also confirmed via headless decompiler)
- tools/ghidra_scripts: DumpProgramInfo.java, DecompileAt.java (helpers)
- docs/SETUP.md: confirm PsyQ 4.0.0; 41 tools + async get_code/SSE notes;
  headless -loader rejected -> use auto-detect; extension-install path;
  ledger #1 moot, #12 resolved
2026-06-13 15:52:37 -06:00

30 lines
1.5 KiB
Java

// DumpProgramInfo.java — headless postScript that prints the authoritative
// program metadata after import+analysis: language/compiler spec, image base,
// function count, and every Program-Information property (incl. the
// ghidra_psx_ldr "PsyQ Version" that Phase 1's milestone requires recorded).
// Plain Java GhidraScript (compiled at runtime by Ghidra; no Jython needed).
import ghidra.app.script.GhidraScript;
import ghidra.framework.options.Options;
import ghidra.program.model.listing.Program;
public class DumpProgramInfo extends GhidraScript {
@Override
public void run() throws Exception {
Program p = currentProgram;
println("=== BFM PROGRAM INFO ===");
println("Name: " + p.getName());
println("LanguageID: " + p.getLanguageID());
println("CompilerSpecID: " + p.getCompilerSpec().getCompilerSpecID());
println("ImageBase: " + p.getImageBase());
println("ExecutableFormat: " + p.getExecutableFormat());
println("FunctionCount: " + p.getFunctionManager().getFunctionCount());
println("DefinedDataCount: " + p.getListing().getDefinedData(true).hasNext());
Options opts = p.getOptions(Program.PROGRAM_INFO);
println("--- Program Information properties ---");
for (String n : opts.getOptionNames()) {
println("PROP " + n + " = " + opts.getValueAsString(n));
}
println("=== END BFM PROGRAM INFO ===");
}
}