blob: b44b2b21327155a27344b0cbd3a099b805791f2f (
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
#
# ###########################################################################
# # WARNING: DEPRECATED - DO NOT USE FOR NEW ANALYSIS (kept for history). #
# # #
# # It passes a FILE virtual address straight to 570.144/ghidra/ #
# # DecompileAt.java, but Ghidra loads these binaries at image base #
# # 0x100000: the script resolves (and decompiles) the function 0x100000 #
# # bytes too low. It also depends on a project produced by the broken #
# # ghidra_analyze.sh above. #
# # #
# # Replacement: tools/ghidra_decompile_at.sh, which translates the file #
# # vaddr with tools/ghidra/DecompileAt.java (file-vaddr aware). #
# ###########################################################################
#
# 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"
|