Files
ghidra/Ghidra/RuntimeScripts/Linux/support/jythonRun
samy kamkar d552692fb3 Prevent segfault from known bash expansion bug
ghidraRun (and launch.sh) both seg fault in some macOS bash
installations via the bash expansions performed in in ghidraRun,
launch.sh, and a few other scripts. This happens on my macports
bash installation and has been reported in homebrew bash
installations as well
(https://github.com/orgs/Homebrew/discussions/6270)

My specific bash that seg faults:
GNU bash, version 5.3.9(1)-release (aarch64-apple-darwin24.6.0)

We can avoid the expansion and use an alternate expansion method.

Scripts were updated via:
```sh
perl -pi -e 's~^(\w+)\s*=\s*"\$\{(\w+)%/\*\}"\s*$~$1="\$(cd "\$(dirname "\$$2")" && pwd)"~' `find Ghidra/RuntimeScripts/Linux/`
```
2026-03-06 12:20:44 -08:00

42 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
#----------------------------------------
# Ghidra Jython launch
#----------------------------------------
# Optionally override the default Java heap memory, which is typically 1/4 of system RAM.
# Supported values are of the regular expression form "\d+[gGmMkK]", allowing the value to be
# specified in gigabytes, megabytes, or kilobytes (for example: 8G, 4096m, etc).
MAXMEM_DEFAULT=
# Allow the above MAXMEM_DEFAULT to be overridden by externally set environment variables
# - GHIDRA_MAXMEM: Desired maximum heap memory for all Ghidra instances
# - GHIDRA_JYTHON_MAXMEM: Desired maximum heap memory only for Ghidra Jython instances
GHIDRA_MAXMEM=${GHIDRA_MAXMEM:=${MAXMEM_DEFAULT}}
GHIDRA_JYTHON_MAXMEM=${GHIDRA_JYTHON_MAXMEM:=${GHIDRA_MAXMEM}}
# Limit the # of garbage collection and JIT compiler threads in case many python
# instances are run in parallel. By default, Java will assign one thread per core
# which does not scale well on servers with many cores.
VMARG_LIST="-XX:ParallelGCThreads=2 -XX:CICompilerCount=2 -Djava.awt.headless=true"
# Apply Java options from externally set environment variables
VMARG_LIST="${VMARG_LIST} ${GHIDRA_JAVA_OPTIONS} ${GHIDRA_JYTHON_JAVA_OPTIONS}"
# Launch mode can be changed to one of the following: fg, debug, debug-suspend
LAUNCH_MODE=fg
# Set the debug address to listen on.
# NOTE: This variable is ignored if not launching in a debugging mode.
DEBUG_ADDRESS=127.0.0.1:13002
# Resolve symbolic link if present and get the directory this script lives in.
# NOTE: "readlink -f" is best but works on Linux only, "readlink" will only work if your PWD
# contains the link you are calling (which is the best we can do on macOS), and the "echo" is the
# fallback, which doesn't attempt to do anything with links.
SCRIPT_FILE="$(readlink -f "$0" 2>/dev/null || readlink "$0" 2>/dev/null || echo "$0")"
SCRIPT_DIR="$(cd "$(dirname "$SCRIPT_FILE")" && pwd)"
# Launch Ghidra Jython
# DEBUG_ADDRESS set via environment for launch.sh
DEBUG_ADDRESS=${DEBUG_ADDRESS} "${SCRIPT_DIR}"/launch.sh "${LAUNCH_MODE}" jdk "Ghidra-Jython" "${GHIDRA_JYTHON_MAXMEM}" "${VMARG_LIST}" ghidra.jython.JythonRun "$@"