GP-5551: Detect and offer installation of missing Python packages.

This commit is contained in:
Dan 2025-05-08 18:30:58 +00:00
parent 23e656ffc0
commit 87db26d487
79 changed files with 2290 additions and 1275 deletions

View file

@ -18,25 +18,15 @@ import os
import sys
home = os.getenv('GHIDRA_HOME')
if os.path.isdir(f'{home}\\ghidra\\.git'):
sys.path.append(
f'{home}\\ghidra\\Ghidra\\Debug\\Debugger-agent-dbgeng\\build\\pypkg\\src')
sys.path.append(
f'{home}\\ghidra\\Ghidra\\Debug\\Debugger-rmi-trace\\build\\pypkg\\src')
elif os.path.isdir(f'{home}\\.git'):
sys.path.append(
f'{home}\\Ghidra\\Debug\\Debugger-agent-dbgeng\\build\\pypkg\\src')
sys.path.append(
f'{home}\\Ghidra\\Debug\\Debugger-rmi-trace\\build\\pypkg\\src')
else:
sys.path.append(
f'{home}\\Ghidra\\Debug\\Debugger-agent-dbgeng\\pypkg\\src')
sys.path.append(f'{home}\\Ghidra\\Debug\\Debugger-rmi-trace\\pypkg\\src')
def append_paths():
sys.path.append("../../../Debugger-rmi-trace/data/support")
from gmodutils import ghidra_module_pypath
sys.path.append(ghidra_module_pypath("Debug/Debugger-rmi-trace"))
sys.path.append(ghidra_module_pypath("Debug/Debugger-agent-dbgeng"))
def main():
append_paths()
# Delay these imports until sys.path is patched
from ghidradbg import commands as cmd
from pybag.dbgeng import core as DbgEng
@ -56,17 +46,17 @@ def main():
print("dbgeng requires a target image - please try again.")
cmd.ghidra_trace_disconnect()
return
cmd.ghidra_trace_create_ext(
target + args,
target + args,
os.getenv('OPT_TARGET_DIR'),
os.getenv('OPT_TARGET_ENV'),
os.getenv('OPT_CREATE_FLAGS'),
os.getenv('OPT_CREATE_ENGFLAGS'),
os.getenv('OPT_VERIFIER_FLAGS'),
os.getenv('OPT_ENG_OPTIONS'),
os.getenv('OPT_VERIFIER_FLAGS'),
os.getenv('OPT_ENG_OPTIONS'),
start_trace=False)
# TODO: HACK
try:
dbg.wait()
@ -75,10 +65,15 @@ def main():
cmd.ghidra_trace_start(target)
cmd.ghidra_trace_sync_enable()
on_state_changed(DbgEng.DEBUG_CES_EXECUTION_STATUS, DbgEng.DEBUG_STATUS_BREAK)
on_state_changed(DbgEng.DEBUG_CES_EXECUTION_STATUS,
DbgEng.DEBUG_STATUS_BREAK)
cmd.repl()
if __name__ == '__main__':
main()
try:
main()
except SystemExit as x:
if x.code != 0:
print(f"Exited with code {x.code}")