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