summaryrefslogtreecommitdiffstats
path: root/userspace/cuda/570.144/scripts/ghidra_decompile_project.sh
diff options
context:
space:
mode:
Diffstat (limited to 'userspace/cuda/570.144/scripts/ghidra_decompile_project.sh')
-rwxr-xr-xuserspace/cuda/570.144/scripts/ghidra_decompile_project.sh36
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"