#!/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}} # 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 # 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 " VMARG_LIST+="-XX:CICompilerCount=2 " # Prevent the shell losing focus when Ghidra initializes VMARG_LIST+="-Djava.awt.headless=true " # 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="${SCRIPT_FILE%/*}" # 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 "$@"