mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-02-20 18:27:04 +03:00
Add delink POSIX script
Also reworked the directory structure a little.
This commit is contained in:
parent
7e1785e466
commit
fe20d64d27
14 changed files with 81 additions and 14 deletions
63
delink.sh
Executable file
63
delink.sh
Executable file
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/sh -eu
|
||||||
|
# Script to produce delinked object files in target/ directory from objects.csv
|
||||||
|
# and a Ghidra project via boricj's delinker extension
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [ $# -ne 3 ]; then usage; fi
|
||||||
|
|
||||||
|
ghidra_path=$1
|
||||||
|
project_path=$2
|
||||||
|
project_name=$3
|
||||||
|
|
||||||
|
printf '=== Delinking object files ===\n'
|
||||||
|
|
||||||
|
while IFS= read -r line; do # Read objects.csv line by line
|
||||||
|
# Split columns (col 1 in $1, col 2 in $2, etc.)
|
||||||
|
set -f; IFS_PREV=$IFS; IFS=,
|
||||||
|
set -- $line
|
||||||
|
set +f; IFS=$IFS_PREV
|
||||||
|
|
||||||
|
if [ "$2" == true ]; then # If object is marked for extraction
|
||||||
|
object_name=$1
|
||||||
|
printf '\n--- %s ---\n' "$object_name"
|
||||||
|
|
||||||
|
# Delete object name and delink toggle positional
|
||||||
|
# arguments, leaving only address ranges
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
# Call Ghidra delinker script
|
||||||
|
delink "$ghidra_path" "$project_path" "$project_name" "$*" "$object_name"
|
||||||
|
fi
|
||||||
|
done < objects.csv
|
||||||
|
}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf '%s\n'\
|
||||||
|
'Usage: delink.sh GHIDRA_PATH PROJECT_PATH PROJECT_NAME'\
|
||||||
|
' GHIDRA_PATH is the path to your Ghidra installation'\
|
||||||
|
' PROJECT_PATH is the path to your JSRF Ghidra project'\
|
||||||
|
' PROJECT_NAME is the name of your JSRF Ghidra project'\
|
||||||
|
''\
|
||||||
|
'Populates the target/ directory with delinked object files using the address'\
|
||||||
|
'ranges given in objects.csv.' >& 2
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
|
delink() {
|
||||||
|
# Invoke headless Ghidra with the delinker script to produce an object file
|
||||||
|
# $1: Ghidra installation path
|
||||||
|
# $2: Ghidra project path
|
||||||
|
# $3: Ghidra project name
|
||||||
|
# $4: Whitespace-separated address ranges to include in object
|
||||||
|
# $5: Output path (inside /target)
|
||||||
|
"$1/support/analyzeHeadless.bat" "$2" "$3"\
|
||||||
|
-process default.xbe\
|
||||||
|
-noanalysis\
|
||||||
|
-postScript DelinkProgram.java\
|
||||||
|
/exporter 'COFF relocatable object'\
|
||||||
|
$(printf "/include-range %s " $4)\
|
||||||
|
/export "target/$5"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
main "$@"
|
||||||
28
objects.csv
28
objects.csv
|
|
@ -1,14 +1,14 @@
|
||||||
Object,.text,.text$x,D3D,DSOUND,MMATRIX,XGRPH,XPP,.rdata,.rdata$x,.data,DOLBY
|
Object,Delink?,.text,.text$x,D3D,DSOUND,MMATRIX,XGRPH,XPP,.rdata,.rdata$x,.data,DOLBY
|
||||||
Core.obj,0x00011000-0x00013FF0,0x00186BA0-0x00186C1F,,,,,,0x001C4390-0x001C44FF,0x001E4D20-0x001E4DAB,0x00251D40-0x00251DAB,
|
Core.obj,false,0x00011000-0x00013FF0,0x00186BA0-0x00186C1F,,,,,,0x001C4390-0x001C44FF,0x001E4D20-0x001E4DAB,0x00251D40-0x00251DAB,
|
||||||
Jet2.obj,0x0006F9E0-0x0006FA6F,0x00187710-0x0018772F,,,,,,,0x001E620C-0x001E622F,0x0022FCE0-0x0022FCE7,
|
Jet2.obj,true,0x0006F9E0-0x0006FA6F,0x00187710-0x00187724,,,,,,,0x001E620C-0x001E622F,0x0022FCE0-0x0022FCE7,
|
||||||
ADX (need to decompose),0x0013A570-0x0014555F,?,,,,,,?,?,?,
|
ADX (need to decompose),false,0x0013A570-0x0014555F,?,,,,,,?,?,?,
|
||||||
XDK Core (need to decompose),0x00145560-0x0014B79F,?,,,,,,?,?,?,
|
XDK Core (need to decompose),false,0x00145560-0x0014B79F,?,,,,,,?,?,?,
|
||||||
Smilebit libs (need to decompose),0x0014B7A0-0x0017BF3F,?,,,,,,?,?,?-0x0022ED2B,
|
Smilebit libs (need to decompose),false,0x0014B7A0-0x0017BF3F,?,,,,,,?,?,?-0x0022ED2B,
|
||||||
C runtime,0x0017BF40-0x00182B80,?,,,,,,?,?,0x0022ED2C-?,
|
C runtime,false,0x0017BF40-0x00182B80,?,,,,,,?,?,0x0022ED2C-?,
|
||||||
Unknown MS math lib,0x00182B81-0x0018694F,?,,,,,,?,?,?,
|
Unknown MS math lib,false,0x00182B81-0x0018694F,?,,,,,,?,?,?,
|
||||||
Another (tiny) Smilebit math lib,0x00186950-0x00186B7F,?,,,,,,?,?,?,
|
Another (tiny) Smilebit math lib,false,0x00186950-0x00186B7F,?,,,,,,?,?,?,
|
||||||
Direct3D8 (need to decompose),,,0x0018CB40-0x0019E334,,,,,?,?,?,
|
Direct3D8 (need to decompose),false,,,0x0018CB40-0x0019E334,,,,,?,?,?,
|
||||||
DirectSound8 (need to decompose),,,,0x0019E340-0x001BA89B,,,,?,?,?,0x0027E080-0x00284E17
|
DirectSound8 (need to decompose),false,,,,0x0019E340-0x001BA89B,,,,?,?,?,0x0027E080-0x00284E17
|
||||||
MMatrix.obj,,,,,0x001BA8A0-0x001BBAAF,,,,,0x00264BD8-0x00264C13,
|
MMatrix.obj,false,,,,,0x001BA8A0-0x001BBAAF,,,,,0x00264BD8-0x00264C13,
|
||||||
Xgraphics (need to decompose),,,,,,0x001BBAC0-0x001BC7BB,,,,,
|
Xgraphics (need to decompose),false,,,,,,0x001BBAC0-0x001BC7BB,,,,,
|
||||||
XDK Peripherals,,,,,,,0x001BC7C0-0x001C3F57,,,,
|
XDK Peripherals,false,,,,,,,0x001BC7C0-0x001C3F57,,,,
|
||||||
|
|
|
||||||
|
|
|
@ -6,6 +6,10 @@ the JSRF decompilation effort.
|
||||||
The addresses given in each section are runtime memory addresses (as one would
|
The addresses given in each section are runtime memory addresses (as one would
|
||||||
see in e.g. Ghidra).
|
see in e.g. Ghidra).
|
||||||
|
|
||||||
|
`delink.sh` and `delink.ps1` are scripts for Unix-like and Windows systems
|
||||||
|
respectively to produced delinked object files in `target/` from a Ghidra
|
||||||
|
project.
|
||||||
|
|
||||||
The `src/` directory contains decompiled code and data. Each symbol is
|
The `src/` directory contains decompiled code and data. Each symbol is
|
||||||
annotated with its corresponding memory address in the original binary, and
|
annotated with its corresponding memory address in the original binary, and
|
||||||
functions are marked as perfectly or imperfectly matching. It's not
|
functions are marked as perfectly or imperfectly matching. It's not
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue