summaryrefslogtreecommitdiffstats
path: root/userspace/cuda/tools/ghidra_decompile_at.sh
blob: 1fa903543601b95d4e096ac67113a5368dda5d81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
#
# ghidra_decompile_at.sh - decompile the function containing a file virtual
# address from an already analyzed project. Version-agnostic replacement for
# the per-version helper (same idea, any project/binary).
#
# Usage: ghidra_decompile_at.sh <project_dir> <project_name> <program> <hex_vaddr> [outfile]
set -euo pipefail

HERE="$(cd "$(dirname "$0")" && pwd)"
GHIDRA_HOME="${GHIDRA_HOME:-/snap/ghidra/current/ghidra}"
ANALYZE="$GHIDRA_HOME/support/analyzeHeadless"
export GHIDRA_HEADLESS_MAXMEM="${GHIDRA_HEADLESS_MAXMEM:-12G}"

PROJECT_DIR="${1:?usage: $0 <project_dir> <project_name> <program> <hex_vaddr> [outfile]}"
PROJECT_NAME="${2:?}"
PROGRAM="${3:?}"
VADDR="${4:?}"
OUT="${5:-$PROJECT_DIR/fn_${VADDR}.c}"

"$ANALYZE" "$PROJECT_DIR" "$PROJECT_NAME" \
    -process "$PROGRAM" -readOnly -noanalysis \
    -scriptPath "$HERE/ghidra" \
    -postScript DecompileAt.java "$VADDR" "$OUT" \
    2>&1 | tail -3

[ -f "$OUT" ] || { echo "[FAIL] no output"; exit 1; }
echo "[ok] $OUT"