mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
36a366ba3f
- 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
30 lines
1.5 KiB
Java
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 ===");
|
|
}
|
|
}
|