mirror of
https://codeberg.org/KeybadeBlox/JSRF-Decompilation.git
synced 2026-02-20 10:17:03 +03:00
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 "$@"
|