mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-02-20 02:07:02 +03:00
This introduces its own issues, but without namespaces, symbol names end up repeated and delinking fails. The delinked symbols also end up without namespaces, introducing yet more problems. This is an improvement for now, but we'll need proper namespace importing into Ghidra at some point.
50 lines
1.3 KiB
Bash
Executable file
50 lines
1.3 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 location namespace name type; do # Iterate 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
|
|
|
|
# Add namespace prefix if not in global namespace
|
|
if [ "$namespace" = '"Global"' ]; then namespace_out=
|
|
else
|
|
namespace_out=${namespace#'"'}
|
|
namespace_out=${namespace_out%'"'}::
|
|
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'\
|
|
"$namespace_out$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 "$@"
|