#!/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 "$@"