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