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

106 lines
3.5 KiB
PowerShell

## ###
# 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.
##
. ..\..\..\Debugger-rmi-trace\data\support\setuputils.ps1
function Add-Gdb-Init-Args {
param([ref]$ArgList)
$ArgList.Value+=("-q")
$ArgList.Value+=("-ex", "`"set pagination off`"")
$ArgList.Value+=("-ex", "`"set confirm off`"")
$ArgList.Value+=("-ex", "`"show version`"")
$ArgList.Value+=("-ex", "`"python import ghidragdb`"")
$ArgList.Value+=("-ex", "`"python if not 'ghidragdb' in locals(): exit(253)`"")
$ArgList.Value+=("-ex", "`"set architecture $Env:OPT_ARCH`"")
$ArgList.Value+=("-ex", "`"set endian $Env:OPT_ENDIAN`"")
}
function Add-Gdb-Image-And-Args {
param([ref]$ArgList, $TargetImage, $TargetArgs)
if ("$TargetImage" -ne "") {
$image = $TargetImage -replace "\\", "\\\\"
$ArgList.Value+=("-ex", "`"file '$image'`"")
}
if ("$TargetArgs" -ne "") {
$tgtargs = $TargetArgs -replace "`"", "\`""
# Escaping parentheses in the arguments is no longer necessary in powershell vs cmd
$ArgList.Value+=("-ex", "`"set args $tgtargs`"")
}
}
function Add-Gdb-Connect-And-Sync {
param([ref]$ArgList, $Address)
$ArgList.Value+=("-ex", "`"ghidra trace connect '$Address'`"")
$ArgList.Value+=("-ex", "`"ghidra trace start`"")
$ArgList.Value+=("-ex", "`"ghidra trace sync-enable`"")
}
function Add-Gdb-Start-If-Image {
param([ref]$ArgList, $TargetImage)
if ("$TargetImage" -ne "") {
$ArgList.Value+=("-ex", "`"$Env:OPT_START_CMD`"")
}
}
function Add-Gdb-Tail-Args {
param([ref]$ArgList)
$ArgList.Value+=("-ex", "`"set confirm on`"")
$ArgList.Value+=("-ex", "`"set pagination on`"")
}
function Compute-Gdb-Usermode-Args {
param($TargetImage, $RmiAddress)
$arglist = @("`"$Env:OPT_GDB_PATH`"")
Add-Gdb-Init-Args -ArgList ([ref]$arglist)
Add-Gdb-Image-And-Args -ArgList ([ref]$arglist) -TargetImage $TargetImage -TargetArgs $Env:OPT_TARGET_ARGS
Add-Gdb-Connect-And-Sync -ArgList ([ref]$arglist) -Address $RmiAddress
Add-Gdb-Start-If-Image -ArgList ([ref]$arglist) -TargetImage $TargetImage
Add-Gdb-Tail-Args -ArgList ([ref]$arglist)
return $arglist
}
function Compute-Gdb-Remote-Args {
param($TargetImage, $TargetCx, $RmiAddress)
$arglist = @("`"$Env:OPT_GDB_PATH`"")
Add-Gdb-Init-Args -ArgList ([ref]$arglist)
Add-Gdb-Image-And-Args -ArgList ([ref]$arglist) -TargetImge $TargetImage -TargetArgs ""
$arglist+=("-ex", "`"echo Connecting to $TargetCx\n`"")
$arglist+=("-ex", "`"target $TargetCx`"")
Add-Gdb-Connect-And-Sync -ArgList ([ref]$arglist) -Address $RmiAddress
$arglist+=("-ex", "`"ghidra trace sync-synth-stopped`"")
Add-Gdb-Tail-Args -ArgList ([ref]$arglist)
return $arglist
}
function Compute-Gdb-PipInstall-Args {
$argvpart = $args -join ", "
$arglist = @("`"$Env:OPT_GDB_PATH`"")
$arglist+=("-ex", "`"set pagination off`"")
$arglist+=("-ex", "`"python import os, sys, runpy`"")
$arglist+=("-ex", "`"python sys.argv=['pip', 'install', '--force-reinstall', $argvpart]`"")
$arglist+=("-ex", "`"python os.environ['PIP_BREAK_SYSTEM_PACKAGE']='1'`"")
$arglist+=("-ex", "`"python runpy.run_module('pip', run_name='__main__')`"")
return $arglist
}