ghidra/Ghidra/Debug/Debugger-agent-gdb/data/support/gdbsetuputils.sh

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__')")
}