mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-4546: Add 'Set breakpoint' multi-action to Breakpoints window.
This commit is contained in:
parent
d23e67a088
commit
fb9a7c62a2
44 changed files with 785 additions and 402 deletions
|
@ -144,8 +144,8 @@ def find_thread_by_regs_obj(object):
|
|||
def find_frame_by_level(level):
|
||||
for f in util.dbg._base.backtrace_list():
|
||||
if f.FrameNumber == level:
|
||||
return f
|
||||
#return dbg().backtrace_list()[level]
|
||||
return f
|
||||
# return dbg().backtrace_list()[level]
|
||||
|
||||
|
||||
def find_frame_by_pattern(pattern, object, err_msg):
|
||||
|
@ -206,8 +206,8 @@ def execute(cmd: str, to_string: bool=False):
|
|||
@REGISTRY.method(action='evaluate', display='Evaluate')
|
||||
# @util.dbg.eng_thread
|
||||
def evaluate(
|
||||
session: sch.Schema('Session'),
|
||||
expr: ParamDesc(str, display='Expr')):
|
||||
session: sch.Schema('Session'),
|
||||
expr: ParamDesc(str, display='Expr')):
|
||||
"""Evaluate a Python3 expression."""
|
||||
return str(eval(expr, shared_globals))
|
||||
|
||||
|
@ -328,8 +328,8 @@ def remove_process(process: sch.Schema('Process')):
|
|||
@REGISTRY.method(action='connect', display='Connect')
|
||||
@util.dbg.eng_thread
|
||||
def target(
|
||||
session: sch.Schema('Session'),
|
||||
cmd: ParamDesc(str, display='Command')):
|
||||
session: sch.Schema('Session'),
|
||||
cmd: ParamDesc(str, display='Command')):
|
||||
"""Connect to a target machine or process."""
|
||||
dbg().attach_kernel(cmd)
|
||||
|
||||
|
@ -345,8 +345,8 @@ def attach_obj(target: sch.Schema('Attachable')):
|
|||
@REGISTRY.method(action='attach', display='Attach by pid')
|
||||
@util.dbg.eng_thread
|
||||
def attach_pid(
|
||||
session: sch.Schema('Session'),
|
||||
pid: ParamDesc(str, display='PID')):
|
||||
session: sch.Schema('Session'),
|
||||
pid: ParamDesc(str, display='PID')):
|
||||
"""Attach the process to the given target."""
|
||||
dbg().attach_proc(int(pid))
|
||||
|
||||
|
@ -354,8 +354,8 @@ def attach_pid(
|
|||
@REGISTRY.method(action='attach', display='Attach by name')
|
||||
@util.dbg.eng_thread
|
||||
def attach_name(
|
||||
session: sch.Schema('Session'),
|
||||
name: ParamDesc(str, display='Name')):
|
||||
session: sch.Schema('Session'),
|
||||
name: ParamDesc(str, display='Name')):
|
||||
"""Attach the process to the given target."""
|
||||
dbg().attach_proc(name)
|
||||
|
||||
|
@ -369,7 +369,7 @@ def detach(process: sch.Schema('Process')):
|
|||
|
||||
@REGISTRY.method(action='launch', display='Launch')
|
||||
def launch_loader(
|
||||
session: sch.Schema('Session'),
|
||||
session: sch.Schema('Session'),
|
||||
file: ParamDesc(str, display='File'),
|
||||
args: ParamDesc(str, display='Arguments')=''):
|
||||
"""
|
||||
|
@ -383,7 +383,7 @@ def launch_loader(
|
|||
|
||||
@REGISTRY.method(action='launch', display='LaunchEx')
|
||||
def launch(
|
||||
session: sch.Schema('Session'),
|
||||
session: sch.Schema('Session'),
|
||||
file: ParamDesc(str, display='File'),
|
||||
args: ParamDesc(str, display='Arguments')='',
|
||||
initial_break: ParamDesc(bool, display='Initial Break')=True,
|
||||
|
@ -405,7 +405,7 @@ def kill(process: sch.Schema('Process')):
|
|||
commands.ghidra_trace_kill()
|
||||
|
||||
|
||||
@REGISTRY.method(action='resume')
|
||||
@REGISTRY.method(action='resume', display="Go")
|
||||
def go(process: sch.Schema('Process')):
|
||||
"""Continue execution of the process."""
|
||||
util.dbg.run_async(lambda: dbg().go())
|
||||
|
@ -456,7 +456,7 @@ def break_address(process: sch.Schema('Process'), address: Address):
|
|||
dbg().bp(expr=address.offset)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_sw_execute')
|
||||
@REGISTRY.method(action='break_ext', display='Set Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def break_expression(expression: str):
|
||||
"""Set a breakpoint."""
|
||||
|
@ -472,7 +472,7 @@ def break_hw_address(process: sch.Schema('Process'), address: Address):
|
|||
dbg().ba(expr=address.offset)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_hw_execute')
|
||||
@REGISTRY.method(action='break_ext', display='Set Hardware Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def break_hw_expression(expression: str):
|
||||
"""Set a hardware-assisted breakpoint."""
|
||||
|
@ -482,50 +482,50 @@ def break_hw_expression(expression: str):
|
|||
@REGISTRY.method(action='break_read')
|
||||
@util.dbg.eng_thread
|
||||
def break_read_range(process: sch.Schema('Process'), range: AddressRange):
|
||||
"""Set a read watchpoint."""
|
||||
"""Set a read breakpoint."""
|
||||
find_proc_by_obj(process)
|
||||
dbg().ba(expr=range.min, size=range.length(), access=DbgEng.DEBUG_BREAK_READ)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_read')
|
||||
@REGISTRY.method(action='break_ext', display='Set Read Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def break_read_expression(expression: str):
|
||||
"""Set a read watchpoint."""
|
||||
"""Set a read breakpoint."""
|
||||
dbg().ba(expr=expression, access=DbgEng.DEBUG_BREAK_READ)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_write')
|
||||
@util.dbg.eng_thread
|
||||
def break_write_range(process: sch.Schema('Process'), range: AddressRange):
|
||||
"""Set a watchpoint."""
|
||||
"""Set a write breakpoint."""
|
||||
find_proc_by_obj(process)
|
||||
dbg().ba(expr=range.min, size=range.length(), access=DbgEng.DEBUG_BREAK_WRITE)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_write')
|
||||
@REGISTRY.method(action='break_ext', display='Set Write Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def break_write_expression(expression: str):
|
||||
"""Set a watchpoint."""
|
||||
"""Set a write breakpoint."""
|
||||
dbg().ba(expr=expression, access=DbgEng.DEBUG_BREAK_WRITE)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_access')
|
||||
@util.dbg.eng_thread
|
||||
def break_access_range(process: sch.Schema('Process'), range: AddressRange):
|
||||
"""Set an access watchpoint."""
|
||||
"""Set an access breakpoint."""
|
||||
find_proc_by_obj(process)
|
||||
dbg().ba(expr=range.min, size=range.length(),
|
||||
access=DbgEng.DEBUG_BREAK_READ | DbgEng.DEBUG_BREAK_WRITE)
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_access')
|
||||
@REGISTRY.method(action='break_ext', display='Set Access Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def break_access_expression(expression: str):
|
||||
"""Set an access watchpoint."""
|
||||
"""Set an access breakpoint."""
|
||||
dbg().ba(expr=expression, access=DbgEng.DEBUG_BREAK_READ | DbgEng.DEBUG_BREAK_WRITE)
|
||||
|
||||
|
||||
@REGISTRY.method(action='toggle')
|
||||
@REGISTRY.method(action='toggle', display='Toggle Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def toggle_breakpoint(breakpoint: sch.Schema('BreakpointSpec'), enabled: bool):
|
||||
"""Toggle a breakpoint."""
|
||||
|
@ -536,7 +536,7 @@ def toggle_breakpoint(breakpoint: sch.Schema('BreakpointSpec'), enabled: bool):
|
|||
dbg().bd(bpt.GetId())
|
||||
|
||||
|
||||
@REGISTRY.method(action='delete')
|
||||
@REGISTRY.method(action='delete', display='Delete Breakpoint')
|
||||
@util.dbg.eng_thread
|
||||
def delete_breakpoint(breakpoint: sch.Schema('BreakpointSpec')):
|
||||
"""Delete a breakpoint."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue