4.5 KiB
Workstation Setup
This project targets a Linux host with Wine. The current workspace is a Debian unstable machine with
python3, cargo, wine, winedbg, gdb, objdump, llvm-objdump, strings, and Java already
present.
Current Local State
- Ghidra install:
~/software/ghidra - Ghidra launcher:
~/software/ghidra/ghidraRun - Current Ghidra status: launches successfully in an interactive shell
- Rizin binaries:
/usr/local/bin/rizin,/usr/local/bin/rz-bin,/usr/local/bin/rz-asm - Project Wine prefix:
rt3_wineprefix/ - Current prefix architecture marker:
win64 - Preferred Wine runtime:
/opt/wine-stable/bin/wine(wine-11.0) - Current runtime status:
winedbgworks with the project prefix and RT3 launches under Wine 11 when started from the install directory
Required Baseline
- Linux host with Wine capable of running the RT3 install in
rt3_wineprefix/ - A Wine setup that can run 32-bit Windows targets through the chosen prefix
- Java 21+ for Ghidra
- Python 3.13+ with
venv - Rust toolchain for the long-term rewrite, validation CLI, and hook DLL
- Binutils / LLVM CLI tools for quick inspection
- 32-bit MinGW linker support for
i686-pc-windows-gnu
Preferred Reverse-Engineering Stack
- Ghidra as the primary GUI disassembler/decompiler
- Rizin as the secondary CLI-first analysis stack
- Existing system tools for quick checks:
objdump,llvm-objdump,strings,gdb,winedbg
Install Policy
- Prefer upstream Ghidra releases over distro packages on this host.
- Prefer upstream Rizin releases or source builds on this host.
- Do not commit tool project databases or local installs into the repo.
- Commit only exported analysis outputs that can be regenerated.
Local Python Environment
Create a repo-local virtual environment for committed helper scripts and quick experiments:
python3 -m venv .venv
source .venv/bin/activate
python -V
Start stdlib-only when possible. Add a dependency manifest only when a non-stdlib package becomes necessary.
Rust Toolchain
This host uses a user-local Rust install. Source it before running cargo or rustup:
. ~/.local/share/cargo/env
cargo --version
rustup target list --installed
The workspace expects:
x86_64-unknown-linux-gnufor host tools such asrrt-clii686-pc-windows-gnufor therrt-hookDLL
The current missing piece on this host is the 32-bit linker driver. Install i686-w64-mingw32-gcc
and keep the workspace linker config pointed at that binary.
Suggested Host Layout
- Ghidra install:
~/software/ghidra/ - Rizin install: system package path such as
/usr/local/bin/ - Repo-local Python environment:
.venv/ - Local Ghidra projects:
ghidra_projects/in the repo root or a sibling workspace
Basic Verification
These commands should work before starting analysis:
java -version
/opt/wine-stable/bin/wine --version
objdump --version | head -n 1
llvm-objdump --version | head -n 1
python3 -m venv --help >/dev/null
Rust-specific verification:
. ~/.local/share/cargo/env
cargo test -p rrt-model -p rrt-cli
cargo build -p rrt-hook --target i686-pc-windows-gnu
If the hook build fails with linker i686-w64-mingw32-gcc not found, the Rust target is installed
but the MinGW PE32 linker is still missing from the host.
For the current end-to-end runtime smoke test, use:
tools/run_hook_smoke_test.sh
That script builds the dinput8.dll proxy, copies it into the local RT3 install, and launches RT3
briefly with WINEDLLOVERRIDES=dinput8=n,b so Wine prefers the native proxy before the builtin DLL.
winedbg is now part of the known-good runtime toolchain for this prefix. Verify it with:
env WINEPREFIX=/home/jan/projects/rrt/rt3_wineprefix winedbg --help
Launch Pattern
RT3 is sensitive to its working directory because it uses relative paths under .\Data\, .\Maps\,
and .\Saved Games\. Launching it from the repo root can make it start and then exit cleanly without
showing a usable game window.
Use this exact pattern:
cd /home/jan/projects/rrt/rt3_wineprefix/drive_c/rt3
WINEPREFIX=/home/jan/projects/rrt/rt3_wineprefix /opt/wine-stable/bin/wine RT3.exe
If the game appears to fail immediately, check the working directory before assuming a Wine or wow64 regression.
Canonical Inputs
- Analyze
rt3_wineprefix/drive_c/rt3/RT3.exeby default. - Treat
rt3_wineprefix/drive_c/rt3_105/RT3.exeas a reference build for later diffs. - Record hashes before trusting any symbol map, address note, or decompilation export.