Skip to content

Tools ​

Every tool and script in GameFrame, with its own help. The same list is in the terminal with ./gameframe tools, and one tool's help with ./gameframe tool NAME.

Discs and disk images ​

ToolKindWhat it does
checkslibraryChecks of a CD's file systems, for discinfo.py: sectors that hold data no file system names, the system area, files that only one directory tree lists, and file dates later than the volume's own date.
discinfoprogramFirst look at a CD image (CUE/BIN, raw BIN or ISO): its tracks, its file systems, its dates, and the files on it.
imagelibraryRead the tracks and sectors of a CD image: a CUE sheet with its BIN files, a raw BIN without a sheet, or a plain ISO.
volumeslibraryFind and read the file systems in a CD data track: ISO 9660 with its Joliet names, the older High Sierra format, an El Torito boot record, and an Apple HFS or HFS+ volume (hybrid Mac and PC discs).

Windows PE ​

ToolKindWhat it does
peinfoprogramFirst look at a Windows executable or DLL: what it is, how it was built, what it uses.
peresprogramList and extract the resources inside a Windows executable or DLL: version information, string tables, dialogs, menus, icons, bitmaps, sounds and the game's own data.
readdataprogramRead typed values from a Windows binary at Ghidra addresses (the DAT_ globals in pseudocode).
stackstringsprogramFind text that the code builds on the stack a few bytes at a time, which a list of strings in the file does not show.
vtableprogramList the slots of a table of function pointers (a C++ vtable) with the functions they hold.

16-bit DOS ​

ToolKindWhat it does
dbx_controlprogramDrive DOSBox-X's built-in debugger from a script, through its debugger control channel.
dosinfoprogramFirst look at a DOS or Windows 3.x executable (MZ, NE): what it is, how it was built, what it uses.
fileio_traceprogramTurn a DOSBox-X file log into a per-file map of reads: which file, at which offset, how many bytes, in what order.
nelibraryRead MZ (DOS) and NE (16-bit protected mode, Windows 3.x) executables: the shared parser behind dosinfo.py and readseg.py.
nedisprogramDisassemble 16-bit code with its relocations applied and its names shown.
omfprogramRead Intel/Microsoft OMF object files and libraries (.OBJ, .LIB): the format of the DOS and 16-bit Windows compilers (Borland, Microsoft, Watcom).
readsegprogramRead typed values from a DOS (MZ) or 16-bit NE executable at Ghidra's seg:off addresses.
td_rustlibraryRust code from Borland Turbo Debugger symbols: record types, the data segment's variables, and the Pascal reader/writer they use.
tdinfoprogramRead Borland Turbo Debugger symbols (TDINFO, signature FB52) from a DOS or NE executable.

Triage ​

ToolKindWhat it does
binviewprogramDraw a file as a picture, one pixel per byte (or per block of bytes), to see its structure at a glance: headers, tables of records, text, code, compressed or encrypted parts, padding.
cite_labelsprogramMake function labels from a reimplementation's citations: every item whose comment says "Original: FUN_xxxx" names that original function.
compare_treesprogramCompare two copies of a game file by file: are two releases (a CD, a GOG or Steam copy, a patch) the same program and the same data?
constantsprogramName the algorithms in a binary by their constants: random number generators, checksums, hashes, ciphers, compressors and well-known maths tricks.
coverageprogramHow much of the original's code does the reimplementation cite?
coverdiffprogramFind the code that runs only when you do something in the game: compare the code coverage of two runs, one without the action and one with it.
decomp_queryprogramAnswer questions about a Ghidra export (scripts/ghidra-export.sh) without reading it whole.
deviationsprogramCollect every known difference from the original into one ledger.
filetypesprogramWhat each file of a game is, from its bytes: the format its first bytes name, its size and its entropy.
fixityprogramKeep a copy of a game unchanged over the years, and prove it: package it as a BagIt bag with a checksum for every file, and check the checksums again whenever you like.
hashnamesprogramName hashed strings: find which hash function a game uses for its names, and which name each hash constant stands for.
insnsprogramList every instruction of a kind in a program: every port read or write, every interrupt, every timer read, every division, every far call.
match_functionsprogramMatch the functions of two builds of a game, and carry your labels from one to the other: a patch, another release, a demo, a version for another platform with the same compiler.
memscanprogramFind where a running game keeps a value, from memory dumps taken while you watch the value change: the gold, a unit's health, the turn counter, the random seed.
pointerpathsprogramFind a way to the address of a value that moves: a chain of pointers from a fixed address (a global variable of the program) through the game's objects to the value.
sigscanprogramByte signatures with wildcards: make them from functions you have named, and find them in another build, a memory dump or a game that uses the same library.
similarprogramHow alike two files are, when they are not identical: two versions of an executable, a patched data file, a renamed file, or a library the game links against.
tablesprogramFind the sine and cosine tables in a binary or a data file, and say exactly how each was made: its length, its scale, its number type and how it was rounded.

Emulators ​

ToolKindWhat it does
call_tracelibraryRecord the calls an emulated function makes to chosen functions, in order, with call sites.
dos_emulibraryCall functions inside a 16-bit DOS or Windows 3.x program (NE or MZ) under Unicorn.
dos_envlibraryA small DOS, BIOS and PC for tools/emu/dos_emu/, so a whole 16-bit program can run headless.
fragmentsprogramCapture fragments of a DOS program's main loop, before and after, from one headless run.
pe_emulibraryCall functions inside a Windows x64 game's EXE and DLLs under Unicorn, without running the game.

Formats ​

ToolKindWhat it does
fieldsprogramFind the fields in many messages or records of one kind: which byte offsets are constant, which count up, which hold the length, which pick the kind of message, and which vary.
markersprogramMark the fields of a data file with unique values, then find where the game puts each one in memory.
pcapprogramRead a network capture (.pcap or .pcapng, from Wireshark or tcpdump) and split it into the conversations of a game: who talks to whom, on which ports, and the bytes of each message.
rawimageprogramTurn raw pixel data into a PNG: a dump of video memory, a screen saved by a DOS game, or a block of a data file that may hold a picture.
readerlibraryA binary reader (little-endian, with big-endian and variable-length reads) for prototyping decoders of a game's data files.
shadersprogramFind the shaders inside a game's files: compiled Direct3D 9 and 10-12 shaders, SPIR-V, and shader source text in GLSL, HLSL and the OpenGL ARB assembly.
skeletonprogramFind skeletons and poses in a model or animation file: arrays of parent indices, and runs of unit quaternions.
swfinfoprogramFirst look at a Flash game: an SWF file, or a Flash projector (an .exe with the SWF inside).
timestampsprogramDecode a number as every common kind of timestamp, or find timestamps inside a file.
validateprogramRun a decoder over every file of a type and report which files fail or leave bytes unread.
xorscanprogramFind the key of a simply obfuscated data file: XOR with one byte or a repeating key, adding a byte, a key that steps by a fixed amount each byte, or each byte XORed with the one before.

Verify ​

ToolKindWhat it does
bitcompareprogramCompare two raw dumps value by value, bit for bit: ground truth against a port's output.
ramdiffprogramCompare the game's memory frame by frame, from the original and from the port, and report the first frame and the first addresses that differ.
seqdiffprogramCompare two traces line by line and show the first place they differ.

Ghidra scripts ​

ToolKindWhat it does
AddMemoryBlocksghidraBuild a program's memory from raw pieces: a booter game's load map, an unpacked memory dump, a console's ROM banks, or overlays loaded at run time.
ApplyLabelsghidraApply a labels file (labels/names.tsv style: address<TAB>label[<TAB>evidence]) to the program.
ExportAddressBatchghidraDecompile selected code addresses in an already analyzed Ghidra project.
ExportAddressRefsghidraExport direct references and their containing functions for selected Ghidra addresses.
ExportAllghidraExport everything an agent needs to read a binary as text, after Ghidra's auto-analysis.
ExportCallArgsghidraList every call to chosen functions with the arguments the decompiler can resolve at each call: constants, strings and global addresses.
ExportNamedFunctionsghidraDecompile functions whose Ghidra names contain any supplied search term.
ExportVtableSlotsghidraPrint executable targets from selected 64-bit MSVC vtables in a Ghidra project.

Scripts ​

ToolKindWhat it does
dosbox-runscriptRun a DOS program under DOSBox-X from the command line: the whole original game, for ground truth that a single emulated function cannot give (frames, demos, file access, timing).
envscriptSource this file to use GameFrame from a shell or an agent session.
extract-installerscriptGet a game's files out of the installer or package it came in, without running it.
ghidra-exportscriptAnalyse one or more binaries with Ghidra (no window) and export them as text an agent can search: decomp.c, functions.tsv, strings.txt, imports.txt, exports.txt per binary.
ghidra-runscriptRun one of the tools/ghidra scripts on a binary in an existing, analysed Ghidra project, without analysing it again (about a minute of start-up, so batch addresses in one run).
liblibraryShared settings for the scripts: where Ghidra, Java and the Python environment are.
new-projectscriptStart a reverse-engineering project for one game, with GameFrame's toolkit and playbook.
setupscriptCheck, and optionally install, everything GameFrame uses.

Code: Apache 2.0. Content: CC0 1.0. No game material: bring your own copy.