diff options
Diffstat (limited to 'userspace/cuda/570.144/scripts/ghidra_decompile_project.sh')
| -rwxr-xr-x | userspace/cuda/570.144/scripts/ghidra_decompile_project.sh | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/userspace/cuda/570.144/scripts/ghidra_decompile_project.sh b/userspace/cuda/570.144/scripts/ghidra_decompile_project.sh new file mode 100755 index 0000000..66d7c90 --- /dev/null +++ b/userspace/cuda/570.144/scripts/ghidra_decompile_project.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# SPDX-License-Identifier: BSD-3-Clause +# +# ghidra_decompile_project.sh - decompile a function from an already-analyzed +# Ghidra project (run scripts/ghidra_analyze.sh once first). No re-import and +# no analysis, so this takes seconds. +# +# Usage: scripts/ghidra_decompile_project.sh <hex-vaddr> [outfile] [program] +# env: GHIDRA_HOME, PROJECT_DIR, PROJECT_NAME (same as ghidra_analyze.sh) +set -e + +HERE="$(cd "$(dirname "$0")" && pwd)" +ROOT="$(cd "$HERE/.." && pwd)" +RUN="$ROOT/run" +VADDR="${1:?usage: $0 <hex-vaddr> [outfile] [program]}" +OUT="${2:-$RUN/fn_$VADDR.c}" +PROGRAM="${3:-libcuda.so.570.144}" + +GHIDRA_HOME="${GHIDRA_HOME:-/snap/ghidra/current/ghidra}" +ANALYZE="$GHIDRA_HOME/support/analyzeHeadless" +PROJECT_DIR="${PROJECT_DIR:-$RUN/ghidra-proj}" +PROJECT_NAME="${PROJECT_NAME:-cuda-analysis}" + +[ -d "$PROJECT_DIR" ] || { echo "no project at $PROJECT_DIR (run ghidra_analyze.sh)"; exit 1; } +mkdir -p "$RUN" + +echo "[*] decompiling $PROGRAM at $VADDR (project) -> $OUT" +"$ANALYZE" "$PROJECT_DIR" "$PROJECT_NAME" \ + -process "$PROGRAM" \ + -noanalysis \ + -scriptPath "$ROOT/ghidra" \ + -postScript DecompileAt.java "$VADDR" "$OUT" \ + 2>&1 | tail -3 + +[ -f "$OUT" ] || { echo "[FAIL] no output"; exit 1; } +echo "[ok] $OUT" |
