mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-04-07 04:50:23 +03:00
Compare commits
6 commits
823b19371c
...
98d88cc212
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98d88cc212 | ||
|
|
76e7714722 | ||
|
|
c713c2c8ea | ||
|
|
da67c782e3 | ||
|
|
6b12d397ff | ||
|
|
4dded02b58 |
8 changed files with 28 additions and 30 deletions
|
|
@ -233,7 +233,7 @@ struct Game {
|
||||||
BOOL useFallbackBgColour;
|
BOOL useFallbackBgColour;
|
||||||
|
|
||||||
// Game state used to select GameObj methods to call in main loop
|
// Game state used to select GameObj methods to call in main loop
|
||||||
// If multiple states are acivated, the precedence is
|
// If multiple states are activated, the precedence is
|
||||||
// coveredPause > Event > FreezeCam > UncoveredPause > Default
|
// coveredPause > Event > FreezeCam > UncoveredPause > Default
|
||||||
BOOL coveredPause; // Game paused with world not visible
|
BOOL coveredPause; // Game paused with world not visible
|
||||||
BOOL event; // Events (cutscenes)
|
BOOL event; // Events (cutscenes)
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ the middle part of the function match is through writing the instructions
|
||||||
directly. Given that the C parts of this function are so simple that a human
|
directly. Given that the C parts of this function are so simple that a human
|
||||||
and a compiler would reasonably produce the exact same code, and this function
|
and a compiler would reasonably produce the exact same code, and this function
|
||||||
exhibits other oddities mentioned in the body, it's likely this whole function
|
exhibits other oddities mentioned in the body, it's likely this whole function
|
||||||
was originally written purely in assemblys. In the spirit of decompilation,
|
was originally written purely in assembly. In the spirit of decompilation,
|
||||||
however, we'll lift what we can into C.
|
however, we'll lift what we can into C.
|
||||||
*/
|
*/
|
||||||
XapiInitProcess();
|
XapiInitProcess();
|
||||||
|
|
@ -107,7 +107,7 @@ however, we'll lift what we can into C.
|
||||||
written function. If it was a function, it must have been
|
written function. If it was a function, it must have been
|
||||||
inlined, but it couldn't be because it must be called from
|
inlined, but it couldn't be because it must be called from
|
||||||
assembly to use the value in ecx that never went on the stack
|
assembly to use the value in ecx that never went on the stack
|
||||||
(as passing data from C to assembly has to do). Notably, this
|
(as passing data from assembly to C has to do). Notably, this
|
||||||
function's calling convention does require edi to be preserved,
|
function's calling convention does require edi to be preserved,
|
||||||
but if left up to the compiler, it will push and pop edi in the
|
but if left up to the compiler, it will push and pop edi in the
|
||||||
prologue and epilogue, not here (which this function must be
|
prologue and epilogue, not here (which this function must be
|
||||||
|
|
@ -135,6 +135,7 @@ however, we'll lift what we can into C.
|
||||||
_cinit();
|
_cinit();
|
||||||
main(0, NULL, NULL);
|
main(0, NULL, NULL);
|
||||||
|
|
||||||
|
// main() is not supposed to return, so error out if it does
|
||||||
XapiBootToDash(XLD_LAUNCH_DASHBOARD_ERROR, XLD_ERROR_INVALID_XBE, 0);
|
XapiBootToDash(XLD_LAUNCH_DASHBOARD_ERROR, XLD_ERROR_INVALID_XBE, 0);
|
||||||
|
|
||||||
// Return 0 to satisfy signature required for thread functions
|
// Return 0 to satisfy signature required for thread functions
|
||||||
|
|
@ -152,7 +153,7 @@ The linker automatically sets this function to the entrypoint.
|
||||||
*/
|
*/
|
||||||
HANDLE thread;
|
HANDLE thread;
|
||||||
|
|
||||||
// Figure out available thread-local storage
|
// Figure out available thread-local storage (used by CreateThread())
|
||||||
XapiTlsSize = 4 + ((
|
XapiTlsSize = 4 + ((
|
||||||
(_tls_used.EndAddressOfRawData - _tls_used.StartAddressOfRawData) +
|
(_tls_used.EndAddressOfRawData - _tls_used.StartAddressOfRawData) +
|
||||||
_tls_used.SizeOfZeroFill
|
_tls_used.SizeOfZeroFill
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Creates classes out namespaces with matching structs, and if they have a
|
// Creates classes out of namespaces with matching structs, and if they have a
|
||||||
// vtable, sets the calling convention of the contained function typdefs to
|
// vtable, sets the calling convention of the contained function typdefs to
|
||||||
// __thiscall.
|
// __thiscall.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,17 @@ import ghidra.program.model.symbol.SourceType;
|
||||||
import ghidra.program.model.symbol.Symbol;
|
import ghidra.program.model.symbol.Symbol;
|
||||||
import ghidra.util.StringUtilities;
|
import ghidra.util.StringUtilities;
|
||||||
|
|
||||||
import java.io.FileReader;
|
import java.nio.file.Files;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
|
||||||
public class EnhancedImport extends GhidraScript {
|
public class EnhancedImport extends GhidraScript {
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
final FileReader in = new FileReader(askFile("Select input file", "OK"));
|
final List<String> lines = Files.readAllLines(askFile("Select input file", "OK").toPath());
|
||||||
final List<String> lines = in.readAllLines();
|
|
||||||
in.close();
|
|
||||||
|
|
||||||
for (int i = 0; i < lines.size(); i++) {
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
final String[] parts = lines.get(i).split("\t");;
|
final String[] parts = lines.get(i).split("\t");;
|
||||||
|
|
|
||||||
|
|
@ -422,34 +422,34 @@ public class MSVC7Mangle extends GhidraScript {
|
||||||
);
|
);
|
||||||
|
|
||||||
return switch(t) {
|
return switch(t) {
|
||||||
case SignedCharDataType _ -> "C";
|
case SignedCharDataType x -> "C";
|
||||||
case UnsignedCharDataType _ -> "E";
|
case UnsignedCharDataType x -> "E";
|
||||||
case CharDataType _ -> "D"; // Must come after its child types
|
case CharDataType x -> "D"; // Must come after its child types
|
||||||
case ShortDataType _ -> "F";
|
case ShortDataType x -> "F";
|
||||||
case UnsignedShortDataType _ -> "G";
|
case UnsignedShortDataType x -> "G";
|
||||||
case IntegerDataType _ -> "H";
|
case IntegerDataType x -> "H";
|
||||||
case UnsignedIntegerDataType _ -> "I";
|
case UnsignedIntegerDataType x -> "I";
|
||||||
case LongDataType _ -> "J";
|
case LongDataType x -> "J";
|
||||||
case UnsignedLongDataType _ -> "K";
|
case UnsignedLongDataType x -> "K";
|
||||||
case FloatDataType _ -> "M";
|
case FloatDataType x -> "M";
|
||||||
case DoubleDataType _ -> "N";
|
case DoubleDataType x -> "N";
|
||||||
case LongDoubleDataType _ -> "O";
|
case LongDoubleDataType x -> "O";
|
||||||
case Pointer p -> "P" +
|
case Pointer p -> "P" +
|
||||||
(p.getDataType() instanceof FunctionSignature ? "6" : "A") +
|
(p.getDataType() instanceof FunctionSignature ? "6" : "A") +
|
||||||
mangleType(p.getDataType(), dict, loc);
|
mangleType(p.getDataType(), dict, loc);
|
||||||
case Union u -> "T" + mangleIdentifier(u.getName(), false, null, dict);
|
case Union u -> "T" + mangleIdentifier(u.getName(), false, null, dict);
|
||||||
case Structure s -> "U" + mangleIdentifier(s.getName(), false, null, dict);
|
case Structure s -> "U" + mangleIdentifier(s.getName(), false, null, dict);
|
||||||
case Enum e -> "W4" + mangleIdentifier(e.getName(), false, null, dict);
|
case Enum e -> "W4" + mangleIdentifier(e.getName(), false, null, dict);
|
||||||
case VoidDataType _ -> "X";
|
case VoidDataType x -> "X";
|
||||||
case LongLongDataType _ -> "_J";
|
case LongLongDataType x -> "_J";
|
||||||
case UnsignedLongLongDataType _ -> "_K";
|
case UnsignedLongLongDataType x -> "_K";
|
||||||
case BooleanDataType _ -> "_N";
|
case BooleanDataType x -> "_N";
|
||||||
case WideCharDataType _ -> "_W";
|
case WideCharDataType x -> "_W";
|
||||||
case Array a -> "PA" + mangleArrDims(a) + mangleType(arrType(a), dict, loc);
|
case Array a -> "PA" + mangleArrDims(a) + mangleType(arrType(a), dict, loc);
|
||||||
case FunctionSignature f -> mangleFnType(f, dict, "function typedef \"" + f.getName() + "\"");
|
case FunctionSignature f -> mangleFnType(f, dict, "function typedef \"" + f.getName() + "\"");
|
||||||
case TypeDef d -> mangleType(d.getBaseDataType(), dict, "typedef \"" + d.getName() + "\"");
|
case TypeDef d -> mangleType(d.getBaseDataType(), dict, "typedef \"" + d.getName() + "\"");
|
||||||
case DefaultDataType _ -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined.");
|
case DefaultDataType x -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined.");
|
||||||
case Undefined _ -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined.");
|
case Undefined x -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined.");
|
||||||
default -> throw new Exception ("Unknown type \"" + t.getClass().getName() + "\" at " + loc);
|
default -> throw new Exception ("Unknown type \"" + t.getClass().getName() + "\" at " + loc);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ printf '%s\n' '// Automatically generated mass header file for Ghidra' > jsrf.h
|
||||||
# Figuring out include order programmatically is awful, so we'll have to add
|
# Figuring out include order programmatically is awful, so we'll have to add
|
||||||
# all the headers here by hand in an order that functions properly
|
# all the headers here by hand in an order that functions properly
|
||||||
HEADERS="
|
HEADERS="
|
||||||
Std.hpp
|
XDK/CRT/stddef.h
|
||||||
XDK/Win32.h
|
XDK/Win32.h
|
||||||
XDK/D3D.h
|
XDK/D3D.h
|
||||||
MUSASHI/MMatrix.hpp
|
MUSASHI/MMatrix.hpp
|
||||||
|
|
|
||||||
0
ghidra/symboltable.tsv
Executable file → Normal file
0
ghidra/symboltable.tsv
Executable file → Normal file
|
Can't render this file because it has a wrong number of fields in line 3.
|
Loading…
Add table
Add a link
Reference in a new issue