diff --git a/Ghidra/RuntimeScripts/Linux/server/ghidraSvr b/Ghidra/RuntimeScripts/Linux/server/ghidraSvr index 25e660ca40..833f002e93 100755 --- a/Ghidra/RuntimeScripts/Linux/server/ghidraSvr +++ b/Ghidra/RuntimeScripts/Linux/server/ghidraSvr @@ -64,6 +64,12 @@ SERVICE_NAME=org.rzo.yajsw.$APP_NAME SCRIPT_FILE="$(readlink -f "$0" 2>/dev/null || readlink "$0" 2>/dev/null || echo "$0")" SCRIPT_DIR="${SCRIPT_FILE%/*}" +# Ensure Ghidra path doesn't contain illegal characters +if [[ "$SCRIPT_DIR" = *"!"* ]]; then + echo "Ghidra path cannot contain a \"!\" character." + exit 1 +fi + # YAJSW likes absolute paths cd "${SCRIPT_DIR}" SCRIPT_DIR="$(pwd)" diff --git a/Ghidra/RuntimeScripts/Linux/support/launch.sh b/Ghidra/RuntimeScripts/Linux/support/launch.sh index 1a8109d705..84388eb590 100755 --- a/Ghidra/RuntimeScripts/Linux/support/launch.sh +++ b/Ghidra/RuntimeScripts/Linux/support/launch.sh @@ -86,7 +86,15 @@ if [[ ${INDEX} -lt 5 ]]; then exit 1 fi +# Sets SUPPORT_DIR to the directory that contains this file (launch.sh) SUPPORT_DIR="${0%/*}" + +# Ensure Ghidra path doesn't contain illegal characters +if [[ "$SUPPORT_DIR" = *"!"* ]]; then + echo "Ghidra path cannot contain a \"!\" character." + exit 1 +fi + if [ -f "${SUPPORT_DIR}/launch.properties" ]; then # Production Environment diff --git a/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat b/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat index 5c84319168..bb2cf2596b 100644 --- a/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat +++ b/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat @@ -13,6 +13,22 @@ rem below: rem set "JAVA_HOME=" +:: Sets SERVER_DIR to the directory that contains this file (ghidraSvr.bat). +:: SERVER_DIR will not contain a trailing slash. +:: +:: '% ~' dereferences the value in param 0 +:: 'd' - drive +:: 'p' - path (without filename) +:: '~0,-1' - removes trailing \ +set "SERVER_DIR=%~dp0" +set "SERVER_DIR=%SERVER_DIR:~0,-1%" + +rem Ensure Ghidra path doesn't contain illegal characters +if not %SERVER_DIR:!=%==%SERVER_DIR% ( + echo Ghidra path cannot contain a "!" character. + exit /B 1 +) + setlocal enabledelayedexpansion set OPTION=%1 @@ -48,10 +64,6 @@ if "%IS_ADMIN%"=="NO" ( if "%OPTION%"=="restart" goto adminFail ) -rem Find the script directory -rem %~dsp0 is location of current script under NT -set "_REALPATH=%~dp0" - set APP_NAME=ghidraSvr set APP_LONG_NAME=Ghidra Server @@ -59,13 +71,13 @@ set MODULE_DIR=Ghidra\Features\GhidraServer set WRAPPER_NAME_PREFIX=yajsw -if exist "%_REALPATH%..\Ghidra\" goto normal +if exist "%SERVER_DIR%\..\Ghidra\" goto normal rem NOTE: If adjusting JAVA command assignment - do not attempt to add parameters (e.g., -d64, -version:1.7, etc.) rem Development Environment -set "GHIDRA_HOME=%_REALPATH%..\..\..\.." -set "WRAPPER_CONF=%_REALPATH%..\..\Common\server\server.conf" +set "GHIDRA_HOME=%SERVER_DIR%\..\..\..\.." +set "WRAPPER_CONF=%SERVER_DIR%\..\..\Common\server\server.conf" set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\build\data" set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\build\dev-meta\classpath.frag" set "LS_CPATH=%GHIDRA_HOME%\GhidraBuild\LaunchSupport\bin\main" @@ -73,8 +85,8 @@ set "LS_CPATH=%GHIDRA_HOME%\GhidraBuild\LaunchSupport\bin\main" goto lab1 :normal -set "GHIDRA_HOME=%_REALPATH%.." -set "WRAPPER_CONF=%_REALPATH%server.conf" +set "GHIDRA_HOME=%SERVER_DIR%\.." +set "WRAPPER_CONF=%SERVER_DIR%\server.conf" set "DATA_DIR=%GHIDRA_HOME%\%MODULE_DIR%\data" set "CLASSPATH_FRAG=%GHIDRA_HOME%\%MODULE_DIR%\data\classpath.frag" set "LS_CPATH=%GHIDRA_HOME%\support\LaunchSupport.jar" diff --git a/Ghidra/RuntimeScripts/Windows/server/svrInstall.bat b/Ghidra/RuntimeScripts/Windows/server/svrInstall.bat index 2df9605318..2e73d7afab 100644 --- a/Ghidra/RuntimeScripts/Windows/server/svrInstall.bat +++ b/Ghidra/RuntimeScripts/Windows/server/svrInstall.bat @@ -1,10 +1,6 @@ @echo off setlocal -rem Find the script directory -rem %~dsp0 is location of current script under NT -set "_REALPATH=%~dp0" - -call "%_REALPATH%\ghidraSvr" install +call "%~dp0ghidraSvr" install pause diff --git a/Ghidra/RuntimeScripts/Windows/server/svrUninstall.bat b/Ghidra/RuntimeScripts/Windows/server/svrUninstall.bat index ac5131418b..eb58d014c4 100644 --- a/Ghidra/RuntimeScripts/Windows/server/svrUninstall.bat +++ b/Ghidra/RuntimeScripts/Windows/server/svrUninstall.bat @@ -1,11 +1,7 @@ @echo off setlocal -rem Find the script directory -rem %~dsp0 is location of current script under NT -set "_REALPATH=%~dp0" - -call "%_REALPATH%\ghidraSvr" uninstall +call "%~dp0ghidraSvr" uninstall pause diff --git a/Ghidra/RuntimeScripts/Windows/support/analyzeHeadless.bat b/Ghidra/RuntimeScripts/Windows/support/analyzeHeadless.bat index e972b07cae..21824bccf8 100644 --- a/Ghidra/RuntimeScripts/Windows/support/analyzeHeadless.bat +++ b/Ghidra/RuntimeScripts/Windows/support/analyzeHeadless.bat @@ -1,8 +1,7 @@ :: Ghidra Headless Analyzer launch (see analyzeHeadlessREADME.html) @echo off - -setlocal EnableDelayedExpansion +setlocal :: Maximum heap memory size. For headless, it is recommended to not use the default value :: because garbage collection could take too long on systems with a large amount of physical @@ -23,9 +22,6 @@ set DEBUG_ADDRESS=127.0.0.1:13002 set VMARG_LIST=-XX:ParallelGCThreads=2 set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2 -:: store current path -set "filepath=%~dp0" - :: Loop through parameters (if there aren't any, just continue) and store :: in params variable. @@ -36,6 +32,7 @@ if "%~1" == "" goto cont :: If -import is found and Windows has not done proper wildcard expansion, force :: this to happen and save expansion to params variable. +setlocal EnableDelayedExpansion if "%~1" == "-import" ( set params=!params! -import for %%f in ("%~2") DO ( @@ -45,10 +42,11 @@ if "%~1" == "-import" ( ) else ( set params=!params! "%~1" ) +setlocal DisableDelayedExpansion shift goto Loop :cont -call "%filepath%launch.bat" %LAUNCH_MODE% Ghidra-Headless "%MAXMEM%" "%VMARG_LIST%" ghidra.app.util.headless.AnalyzeHeadless %params% +call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra-Headless "%MAXMEM%" "%VMARG_LIST%" ghidra.app.util.headless.AnalyzeHeadless %params% diff --git a/Ghidra/RuntimeScripts/Windows/support/buildGhidraJar.bat b/Ghidra/RuntimeScripts/Windows/support/buildGhidraJar.bat index 07f1c4dddc..1d58bad254 100644 --- a/Ghidra/RuntimeScripts/Windows/support/buildGhidraJar.bat +++ b/Ghidra/RuntimeScripts/Windows/support/buildGhidraJar.bat @@ -7,10 +7,17 @@ setlocal :: fg, debug, debug-suspend set LAUNCH_MODE=fg -:: Sets SCRIPT_DIR to the directory that contains this file (ends with '\') -set "SCRIPT_DIR=%~dp0" +:: Sets SUPPORT_DIR to the directory that contains this file (buildGhidraJar.bat). +:: SUPPORT_DIR will not contain a trailing slash. +:: +:: '% ~' dereferences the value in param 0 +:: 'd' - drive +:: 'p' - path (without filename) +:: '~0,-1' - removes trailing \ +set "SUPPORT_DIR=%~dp0" +set "SUPPORT_DIR=%SUPPORT_DIR:~0,-1%" -set "GHIDRA_ROOT_DIR=%SCRIPT_DIR%..\Ghidra" +set "GHIDRA_ROOT_DIR=%SUPPORT_DIR%\..\Ghidra" if exist "%GHIDRA_ROOT_DIR%" goto continue echo This script does not support development mode use @@ -20,4 +27,4 @@ exit /B 1 set APP_VMARGS=-DGhidraJarBuilder.Name=%~n0 -call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra "" "%APP_VMARGS%" ghidra.util.GhidraJarBuilder -main ghidra.JarRun %* +call "%SUPPORT_DIR%\launch.bat" %LAUNCH_MODE% Ghidra "" "%APP_VMARGS%" ghidra.util.GhidraJarBuilder -main ghidra.JarRun %* diff --git a/Ghidra/RuntimeScripts/Windows/support/launch.bat b/Ghidra/RuntimeScripts/Windows/support/launch.bat index 4ce41ccfed..b5ae0ca399 100644 --- a/Ghidra/RuntimeScripts/Windows/support/launch.bat +++ b/Ghidra/RuntimeScripts/Windows/support/launch.bat @@ -24,9 +24,6 @@ exit /B 1 :continue -:: Delay the expansion of our loop items below since the value is being updated as the loop works -setlocal enabledelayedexpansion - :: See if we were doubled clicked or run from a command prompt set DOUBLE_CLICKED=n for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" set DOUBLE_CLICKED=y @@ -40,6 +37,17 @@ for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" set DOUBLE_CLI :: '~0,-1' - removes trailing \ set "SUPPORT_DIR=%~dp0" set "SUPPORT_DIR=%SUPPORT_DIR:~0,-1%" + +:: Ensure Ghidra path doesn't contain illegal characters +if not %SUPPORT_DIR:!=%==%SUPPORT_DIR% ( + echo Ghidra path cannot contain a "!" character. + set ERRORLEVEL=1 + goto exit1 +) + +:: Delay the expansion of our loop items below since the value is being updated as the loop works +setlocal enabledelayedexpansion + :: :: Parse arguments :: diff --git a/Ghidra/RuntimeScripts/Windows/support/pythonRun.bat b/Ghidra/RuntimeScripts/Windows/support/pythonRun.bat index 650e9f172b..3622672d2b 100644 --- a/Ghidra/RuntimeScripts/Windows/support/pythonRun.bat +++ b/Ghidra/RuntimeScripts/Windows/support/pythonRun.bat @@ -1,8 +1,7 @@ :: Ghidra python launch @echo off - -setlocal EnableDelayedExpansion +setlocal :: Maximum heap memory size :: Default for Windows 32-bit is 768M and 64-bit is 1024M @@ -25,7 +24,4 @@ set DEBUG_ADDRESS=127.0.0.1:13002 set VMARG_LIST=-XX:ParallelGCThreads=2 set VMARG_LIST=%VMARG_LIST% -XX:CICompilerCount=2 -:: store current path -set "filepath=%~dp0" - -call "%filepath%launch.bat" %LAUNCH_MODE% Ghidra-Python "%MAXMEM%" "%VMARG_LIST%" ghidra.python.PythonRun %params% +call "%~dp0launch.bat" %LAUNCH_MODE% Ghidra-Python "%MAXMEM%" "%VMARG_LIST%" ghidra.python.PythonRun %params% diff --git a/GhidraDocs/InstallationGuide.html b/GhidraDocs/InstallationGuide.html index f7f5b5e72d..84dfd1fb84 100644 --- a/GhidraDocs/InstallationGuide.html +++ b/GhidraDocs/InstallationGuide.html @@ -18,7 +18,7 @@

Ghidra Installation Guide

-The installation information provided is effective as of Ghidra 9.2 and is subject to change with +The installation information provided is effective as of Ghidra 10.0.1 and is subject to change with future releases.

@@ -537,6 +537,10 @@ be installed in a pre-existing Eclipse installation.

new files. Future versions of Ghidra will address this in order to ensure compatibility with the newest versions of Java. +
  • + Ghidra will not launch when its path contains a "!" character. This is to avoid issues that + Java's internal libraries have parsing these paths ("!" is used as a jar-separator by Java). +
  • Windows

    Linux