mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-10-22 18:22:23 -09:00
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/` ```
42 lines
2.1 KiB
Bash
Executable File
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 "$@"
|