summaryrefslogtreecommitdiffstats
path: root/userspace/cuda/570.144/scripts/ghidra_analyze.sh
blob: eb8422b90f2c818351a9201b7d1badf6871b4e7d (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
50
51
52
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
#
# ###########################################################################
# # WARNING: DEPRECATED - DO NOT USE FOR NEW ANALYSIS (kept for history).   #
# #                                                                         #
# # Two bugs make its output unusable:                                      #
# #  1. It passes FILE virtual addresses to Ghidra, which loads these       #
# #     binaries at image base 0x100000. Every address is 0x100000 too low, #
# #     so the decompiled "functions" are the wrong ones.                   #
# #  2. `-analysisTimeoutPerFile 0` does not mean "no timeout" in this      #
# #     Ghidra build: it aborts auto-analysis immediately, producing an     #
# #     analysed-looking project with no analysis at all.                   #
# #                                                                         #
# # Replacement: tools/ghidra_full_analysis.sh (plus                        #
# # tools/ghidra/ConfigureAnalysis.java).                                   #
# ###########################################################################
#
# ghidra_analyze.sh - import a library into a Ghidra project and run the full
# auto-analysis once. The project is kept, so later decompilations are cheap:
#
#   scripts/ghidra_decompile_project.sh <hex-vaddr> [outfile]
#
# Full analysis of a ~70 MB library can take a long time; run it in the
# background and log to run/ghidra-analyze.log.
#
# Usage: scripts/ghidra_analyze.sh <binary>
#   env: GHIDRA_HOME (default /snap/ghidra/current/ghidra)
#        PROJECT_DIR (default ../run/ghidra-proj)
#        PROJECT_NAME (default cuda-analysis)
set -e

HERE="$(cd "$(dirname "$0")" && pwd)"
ROOT="$(cd "$HERE/.." && pwd)"
RUN="$ROOT/run"
BIN="${1:?usage: $0 <binary>}"

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}"

[ -x "$ANALYZE" ] || { echo "analyzeHeadless not found at $ANALYZE"; exit 1; }
mkdir -p "$PROJECT_DIR"

echo "[*] importing + analyzing $BIN (this can take a long time)"
"$ANALYZE" "$PROJECT_DIR" "$PROJECT_NAME" \
    -import "$BIN" \
    -overwrite \
    -scriptPath "$ROOT/ghidra" \
    -analysisTimeoutPerFile 0
echo "[ok] analysis complete"