mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
127 lines
3.1 KiB
Bash
127 lines
3.1 KiB
Bash
## ###
|
|
# IP: GHIDRA
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
##
|
|
. $MODULE_Debugger_rmi_trace_HOME/data/support/setuputils.sh
|
|
|
|
add-gdb-init-args() {
|
|
args+=(-q)
|
|
args+=(-ex "set pagination off")
|
|
args+=(-ex "set confirm off")
|
|
args+=(-ex "show version")
|
|
args+=(-ex "python import ghidragdb")
|
|
args+=(-ex "python if not 'ghidragdb' in locals(): exit(253)")
|
|
args+=(-ex "set architecture $OPT_ARCH")
|
|
args+=(-ex "set endian $OPT_ENDIAN")
|
|
}
|
|
|
|
add-gdb-image-and-args() {
|
|
target_image=$1
|
|
shift
|
|
|
|
if [ -n "$target_image" ]; then
|
|
args+=(-ex "file '$target_image'")
|
|
fi
|
|
if [ "$#" -ne 0 ]; then
|
|
local qargs
|
|
printf -v qargs '%q ' "$@"
|
|
args+=(-ex "set args $qargs")
|
|
fi
|
|
}
|
|
|
|
add-gdb-inferior-tty() {
|
|
# Ghidra will leave TTY_TARGET empty when OPT_EXTRA_TTY is false.
|
|
# Gdb takes empty to mean the same terminal.
|
|
args+=(-ex "set inferior-tty $TTY_TARGET")
|
|
}
|
|
|
|
add-gdb-connect-and-sync() {
|
|
address=$1
|
|
|
|
args+=(-ex "ghidra trace connect '$address'")
|
|
args+=(-ex "ghidra trace start")
|
|
args+=(-ex "ghidra trace sync-enable")
|
|
}
|
|
|
|
add-gdb-start-if-image() {
|
|
target_image=$1
|
|
|
|
if [ -n "$target_image" ]; then
|
|
args+=(-ex "$OPT_START_CMD")
|
|
fi
|
|
}
|
|
|
|
add-gdb-tail-args() {
|
|
args+=(-ex "set confirm on")
|
|
# args+=(-ex "set pagination on")
|
|
}
|
|
|
|
compute-gdb-usermode-args() {
|
|
target_image=$1
|
|
rmi_address=$2
|
|
shift
|
|
shift
|
|
|
|
args+=("$OPT_GDB_PATH")
|
|
add-gdb-init-args
|
|
add-gdb-image-and-args "$target_image" "$@"
|
|
add-gdb-inferior-tty
|
|
add-gdb-connect-and-sync "$rmi_address"
|
|
add-gdb-start-if-image "$target_image"
|
|
add-gdb-tail-args
|
|
}
|
|
|
|
compute-gdb-wine-args() {
|
|
target_image=$1
|
|
rmi_address=$2
|
|
shift
|
|
shift
|
|
|
|
args+=("$OPT_GDB_PATH")
|
|
add-gdb-init-args
|
|
add-gdb-image-and-args "$OPT_WINE_PATH" "$target_image" "$@"
|
|
add-gdb-inferior-tty
|
|
gdb+=(-ex "starti")
|
|
gdb+=(-ex "ghidra wine run-to-image '$target_image'")
|
|
add-gdb-connect-and-sync "$rmi_address"
|
|
gdb+=(-ex "ghidra trace sync-synth-stopped")
|
|
add-gdb-tail-args
|
|
}
|
|
|
|
compute-gdb-remote-args() {
|
|
target_image=$1
|
|
target_cx=$2
|
|
rmi_address=$3
|
|
|
|
args+=("$OPT_GDB_PATH")
|
|
add-gdb-init-args
|
|
add-gdb-image-and-args "$target_image"
|
|
args+=(-ex "echo Connecting to $target_cx\n")
|
|
args+=(-ex "target $target_cx")
|
|
add-gdb-connect-and-sync "$rmi_address"
|
|
args+=(-ex "ghidra trace sync-synth-stopped")
|
|
add-gdb-tail-args
|
|
}
|
|
|
|
compute-gdb-pipinstall-args() {
|
|
local argvpart
|
|
printf -v argvpart ", %s" "$@"
|
|
pipargs=("$OPT_GDB_PATH")
|
|
pipargs+=(-q)
|
|
pipargs+=(-ex "set pagination off")
|
|
pipargs+=(-ex "python import os, sys, runpy")
|
|
pipargs+=(-ex "python sys.argv=['pip', 'install', '--force-reinstall'$argvpart]")
|
|
pipargs+=(-ex "python os.environ['PIP_BREAK_SYSTEM_PACKAGE']='1'")
|
|
pipargs+=(-ex "python runpy.run_module('pip', run_name='__main__')")
|
|
}
|