From 8fc7d8d918142a85e6d02fb52b33ed984cfcd874 Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Sat, 21 Mar 2026 15:23:03 -0400 Subject: [PATCH 1/4] Add recommended tool versions to Getting Started --- documentation/gettingstarted.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/documentation/gettingstarted.md b/documentation/gettingstarted.md index 626f25e..695d8b3 100644 --- a/documentation/gettingstarted.md +++ b/documentation/gettingstarted.md @@ -24,12 +24,22 @@ You'll need a few things to get a decompilation workflow ready: can find it - The [Git](https://git-scm.com/) version control tool to clone and work on this repository +- [Java](https://jdk.java.net/archive/) 21 or later, as required by Ghidra. + You may already have it; Minecraft apparently provides Java 21, for instance. + Later versions should also work; 21 and 25 specifically have been confirmed + to work fine. - The [Ghidra](https://github.com/NationalSecurityAgency/ghidra) reverse - engineering tool to analyze and browse the executable + engineering tool to analyze and browse the executable (version 12.0.3 is + strongly recommended, as the extensions have releases for this exact version) - The [XBE extension](https://github.com/XboxDev/ghidra-xbe) for Ghidra to - import and analyze the JSRF executable + import and analyze the JSRF executable (version will depend on your Ghidra + version; ideally it will match your Ghidra version, like + [12.0.3](https://github.com/XboxDev/ghidra-xbe/releases/tag/build-202602250354)) - The [delinker extension](https://github.com/boricj/ghidra-delinker-extension) - for Ghidra to export object files from the executable + for Ghidra to export object files from the executable (version again depends + on Ghidra version; + [v0.8.0](https://github.com/boricj/ghidra-delinker-extension/releases/tag/v0.8.0) + provides a download for Ghidra 12.0.3 specifically) - The [objdiff](https://github.com/encounter/objdiff) code diffing tool to compare your C++ code's compiled output to the delinked object files From 3e8622f3699daa14ab3b051d441aeb331b5c48ff Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Sat, 21 Mar 2026 20:55:52 -0400 Subject: [PATCH 2/4] Mention Wine for non-Windows OSs in documentation --- documentation/gettingstarted.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/gettingstarted.md b/documentation/gettingstarted.md index 695d8b3..d6aa4d2 100644 --- a/documentation/gettingstarted.md +++ b/documentation/gettingstarted.md @@ -22,6 +22,8 @@ You'll need a few things to get a decompilation workflow ready: your C++ code - You'll also want to add its `Bin/` directory to your `PATH` so that objdiff can find it + - If not on Windows, `CL.EXE` and friends can be passed to + [Wine](https://www.winehq.org) to run the compiler on other platforms - The [Git](https://git-scm.com/) version control tool to clone and work on this repository - [Java](https://jdk.java.net/archive/) 21 or later, as required by Ghidra. From da6865e5f633fb26a0b97a261b8239bb89b41a82 Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Sat, 21 Mar 2026 20:56:49 -0400 Subject: [PATCH 3/4] Fix typo in Core.hpp Was making builds fail. --- decompile/objdiff.json | 10 +++++----- decompile/src/JSRF/Core.hpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/decompile/objdiff.json b/decompile/objdiff.json index 083041a..97328fd 100644 --- a/decompile/objdiff.json +++ b/decompile/objdiff.json @@ -16,10 +16,10 @@ "source_path": "src/JSRF/Jet2.cpp" }, "symbol_mappings": { - "?main_funcinfo@@3UFuncInfo@@A": "$T747", - "?main_handler@@YAXPAUEHExceptionRecord@@PAKPAXPAU_xDISPATCHER_CONTEXT@@@Z": "$L751", - "?main_handler_unwind1@@YAXXZ": "$L743", - "?main_unwindmap@@3PAUUnwindMapEntry@@A": "$T753", + "?main_funcinfo@@3UFuncInfo@@A": "$T1112", + "?main_handler@@YAXPAUEHExceptionRecord@@PAKPAXPAU_xDISPATCHER_CONTEXT@@@Z": "$L1116", + "?main_handler_unwind1@@YAXXZ": "$L1108", + "?main_unwindmap@@3PAUUnwindMapEntry@@A": "$T1118", "[.rdata-0]": "[.xdata$x-0]" } }, @@ -55,4 +55,4 @@ } } ] -} +} \ No newline at end of file diff --git a/decompile/src/JSRF/Core.hpp b/decompile/src/JSRF/Core.hpp index 718536d..3206349 100644 --- a/decompile/src/JSRF/Core.hpp +++ b/decompile/src/JSRF/Core.hpp @@ -78,7 +78,7 @@ struct UnknownStatic19 { }; struct UnknownStatic24 { UnknownStatic24(); - virtual ~UnknownStatic19(); + virtual ~UnknownStatic24(); }; struct UnknownStatic27 { UnknownStatic27(); From 57fc53ebfbbbdc62681b091f03dd1dbfafc93b4a Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Sat, 21 Mar 2026 22:35:37 -0400 Subject: [PATCH 4/4] Add IMAGE_TLS_DIRECTORY32 struct With this, everything is delinking again. --- decompile/src/XDK/Win32.h | 17 +++++++++++++++-- ghidra/symboltable.tsv | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/decompile/src/XDK/Win32.h b/decompile/src/XDK/Win32.h index 324e71a..66769ac 100644 --- a/decompile/src/XDK/Win32.h +++ b/decompile/src/XDK/Win32.h @@ -28,6 +28,7 @@ typedef unsigned short WORD; typedef unsigned long DWORD; typedef void VOID; +typedef void * PVOID; typedef void * LPVOID; typedef unsigned long SIZE_T; typedef float FLOAT; @@ -55,14 +56,26 @@ typedef long HRESULT; #define ERROR_SUCCESS 0L #define E_OUTOFMEMORY 0x8007000EL +// Low-level stuff +typedef void (*IMAGE_TLS_CALLBACK)(PVOID DllHandle, DWORD Reason, PVOID Reserved); + +struct IMAGE_TLS_DIRECTORY32 { + DWORD StartAddressOfRawData; + DWORD EndAddressOfRawData; + DWORD * AddressOfIndex; + IMAGE_TLS_CALLBACK * * AddressOfCallBacks; + DWORD SizeOfZeroFill; + DWORD Characteristics; +}; + // Standard Win32 functions VOID __stdcall Sleep(DWORD dwMilliseconds); LPVOID __stdcall VirtualAlloc( LPVOID lpAddress, SIZE_T dwSize, - DWORD flAllocationType, - DWORD flProtect + DWORD flAllocationType, + DWORD flProtect ); diff --git a/ghidra/symboltable.tsv b/ghidra/symboltable.tsv index 9d66389..055c3c2 100644 --- a/ghidra/symboltable.tsv +++ b/ghidra/symboltable.tsv @@ -1105,7 +1105,7 @@ 0x001d7b20 data undefined * SoundManager::vtable 0x001da300 data undefined * UnknownObj_0x1DE2::vtable 0x001da350 data undefined * UnknownObj_0x1DE4::vtable -0x001e0c2c data IMAGE_TLS_DIRECTORY_32 extern_"C"::_tls_used +0x001e0c2c data IMAGE_TLS_DIRECTORY32 extern_"C"::_tls_used 0x001e0ea0 data float g_radToU16Angle1 0x001e0ea4 data float g_radToU16Angle2 0x001e0ea8 data float g_radToU16Angle3