This repository is a clean public workspace for static reverse engineering of the PlayStation 1 release of Einhander.
It contains:
- reusable Python tooling to extract PS-X executables from disc images
- headless Ghidra automation for repeatable imports and surveys
- reusable Java Ghidra scripts for tracing, callsite dumps, reference scans, and bulk renaming
- a growing static research map for Einhander's runtime, loader flow, and packed-code descriptors
It does not contain:
- game assets
- Unity reconstruction work
- emulator RAM dumps
- generated build/cache directories
- copyrighted disc content
Bring your own legally obtained disc image.
tools/: extraction and Ghidra automation scriptsghidra_scripts/: headless Ghidra helpersdocs/methodology.md: pipeline and workflow notesdocs/einhander-engine-map.md: current reverse-engineering map and findings
The workflow is deliberately simple and reproducible:
- Extract visible ISO9660 files and PS-X executables from a PS1 disc image.
- Import each executable into Ghidra with either
ghidra_psx_ldror a raw binary fallback. - Seed the real PS-X entry point before analysis so references and control flow start from the correct address.
- Export function surveys, targeted traces, callsites, and address-reference reports.
- Correlate static command producers in
SYS.EXEwith packed runtime consumers inBININDEX.BINandBINPACK*.BIN. - Record evidence-backed naming and system maps in the docs.
The emphasis in this repo is static analysis first: descriptors, dispatch tables, command queues, packed loaders, and runtime code regions are mapped by tracing executable control flow and by decoding packed-file structure.
Extract and import a disc image into Ghidra:
python3 tools/ps1_ghidra_pipeline.py \
"/path/to/game.cue"Run a survey over an imported program:
./tools/run_psx_survey.sh \
"/path/to/analysis/ghidra" \
"Game_PS1" \
"SYS.EXE"Install the PSX loader extension for Ghidra:
./tools/install_ghidra_psx_ldr.sh \
"/path/to/ghidra_psx_ldr.zip"The current map is in docs/einhander-engine-map.md.
Highlights already established:
SCUS_942.43is a thin boot loader that hands off intoSYS.EXE.SYS.EXEowns the main runtime, command queue, file indexing, and resource streaming logic.SubmitEngineCommandat0x80044294is a generic scripted engine/resource queue API, not a single-purpose loader.- Several external runtime targets have been tied to specific
BINPACKentries and descriptor families. - The
0x80190000family is now linked to a second-stage table-driven producer path seeded by slot 1 scripted playback.
- Ghidra
ghidra_psx_ldr- PS-X EXE format
- ISO9660 filesystem layout on PlayStation discs
- PsyQ symbol/signature workflows for PS1 reversing
This repository is for reverse-engineering research and tooling. It intentionally excludes game data and generated runtime dumps. If you use it on a commercial title, keep your inputs local and do not commit extracted binaries or copyrighted assets.