mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-02-20 02:07:02 +03:00
We can now create a fresh Ghidra project, import the JSRF executable into it, import symbols into it, delink object files from it, and then decompile with objdiff. Just needs some documentation.
42 lines
1.1 KiB
Bash
Executable file
42 lines
1.1 KiB
Bash
Executable file
#!/bin/sh -eu
|
|
# Script to convert Ghidra symbol table CSV export data to the format used by
|
|
# the Ghidra script ImportSymbolsScript.py
|
|
|
|
main() {
|
|
if [ $# -ne 1 ]; then usage; fi
|
|
|
|
printf 'Writing symbol table to symboltable.tsv...'
|
|
|
|
>symboltable.tsv # Create/truncate output file
|
|
|
|
while IFS=, read -r name location type; do # Iterate over rows
|
|
# Determine symbol type (skip if unrecognized, e.g. header row)
|
|
if [ "$type" == '"Function"' ]; then type_out=f
|
|
elif [ "$type" == '"Data Label"' ]; then type_out=l
|
|
else continue
|
|
fi
|
|
|
|
# Strip quotes from other columns
|
|
name_out=${name#'"'} ; name_out=${name_out%'"'}
|
|
location_out=${location#'"'}; location_out=${location_out%'"'}
|
|
|
|
# Output row
|
|
printf '%s\t%s\t%s\n' "$name_out" "$location_out" "$type_out"\
|
|
>> symboltable.tsv
|
|
done < $1
|
|
|
|
printf ' done.\n'
|
|
}
|
|
|
|
usage() {
|
|
printf '%s\n'\
|
|
'Usage: make_symboltable.sh CSVFILE'\
|
|
' CSVFILE is the path of a symbol table CSV from Ghidra'\
|
|
''\
|
|
'The CSV file should have columns Name, Location, and Type. The output file'\
|
|
'will be named "symboltable.tsv".' >&2
|
|
exit 2
|
|
}
|
|
|
|
|
|
main "$@"
|