From 888c8c911d6cde96596fdb64936ceb2958cd4acf Mon Sep 17 00:00:00 2001
From: Dan <46821332+nsadeveloper789@users.noreply.github.com>
Date: Wed, 18 Jan 2023 12:22:26 -0500
Subject: [PATCH] GP-2676: Breakpoints can now be placed in emulator with
Sleigh injections or custom conditions.
---
.../Debugger/data/debugger.theme.properties | 10 +-
.../DebuggerBreakpointMarkerPlugin.html | 4 +-
.../DebuggerBreakpointsPlugin.html | 265 ++++--
.../images/DebuggerBreakpointsPlugin.png | Bin 27939 -> 27493 bytes
.../DebuggerControlPlugin.html | 113 +--
.../DebuggerEmulationServicePlugin.html | 23 +-
.../DebuggerModulesPlugin.html | 7 +
.../DebuggerThreadsPlugin.html | 98 +--
.../images/DebuggerThreadsPlugin.png | Bin 20532 -> 18655 bytes
.../DebuggerTimePlugin.html | 35 +-
.../DebuggerTraceViewDiffPlugin.html | 12 +-
.../event/TraceActivatedPluginEvent.java | 10 +-
.../TraceInactiveCoordinatesPluginEvent.java | 34 +
.../core/debug/gui/DebuggerResources.java | 46 +-
.../AbstractDebuggerSleighInputDialog.java | 140 ++++
.../gui/breakpoint/BreakpointLocationRow.java | 10 +-
.../DebuggerBreakpointMarkerPlugin.java | 88 +-
.../DebuggerBreakpointsProvider.java | 368 +++++++--
.../DebuggerSleighExpressionInputDialog.java | 47 ++
.../DebuggerSleighSemanticInputDialog.java | 47 ++
.../gui/breakpoint/LogicalBreakpointRow.java | 6 +
.../gui/console/DebuggerConsoleProvider.java | 2 +-
.../gui/control/DebuggerControlPlugin.java | 27 +-
.../debug/gui/copying/DebuggerCopyPlan.java | 3 +-
.../gui/listing/DebuggerListingProvider.java | 1 -
.../memory/DebuggerLegacyRegionsPanel.java | 2 +-
.../gui/memory/DebuggerRegionsProvider.java | 10 +-
.../modules/DebuggerLegacyModulesPanel.java | 2 +-
.../modules/DebuggerLegacySectionsPanel.java | 2 +-
.../gui/modules/DebuggerModulesProvider.java | 10 +-
.../DebuggerStaticMappingProvider.java | 3 +-
.../gui/objects/DebuggerObjectsProvider.java | 3 +-
.../gui/stack/DebuggerStackProvider.java | 8 +-
.../thread/DebuggerLegacyThreadsPanel.java | 3 +-
.../gui/thread/DebuggerThreadsProvider.java | 66 +-
.../debug/gui/time/DebuggerTimeProvider.java | 56 +-
.../breakpoint/BreakpointActionItem.java | 30 +
.../breakpoint/BreakpointActionSet.java | 90 +-
...ebuggerLogicalBreakpointServicePlugin.java | 325 +++++---
.../DeleteEmuBreakpointActionItem.java | 39 +
... => DeleteTargetBreakpointActionItem.java} | 27 +-
.../DisableEmuBreakpointActionItem.java | 34 +
...=> DisableTargetBreakpointActionItem.java} | 27 +-
.../EnableEmuBreakpointActionItem.java | 33 +
... => EnableTargetBreakpointActionItem.java} | 27 +-
.../breakpoint/LogicalBreakpointInternal.java | 414 +---------
.../breakpoint/LoneLogicalBreakpoint.java | 24 +-
.../breakpoint/MappedLogicalBreakpoint.java | 117 ++-
.../breakpoint/PlaceBreakpointActionItem.java | 73 --
.../PlaceEmuBreakpointActionItem.java | 114 +++
.../PlaceTargetBreakpointActionItem.java | 41 +
.../service/breakpoint/ProgramBreakpoint.java | 496 +++++++++++
.../breakpoint/TraceBreakpointSet.java | 463 +++++++++++
.../DebuggerStateEditingServicePlugin.java | 232 ++----
.../DebuggerEmulationServicePlugin.java | 41 +-
.../emulation/ProgramEmulationUtils.java | 69 +-
.../model/DebuggerModelServicePlugin.java | 4 +-
.../DebuggerTraceManagerServicePlugin.java | 173 ++--
...dRowWrappedEnumeratedColumnTableModel.java | 6 +-
.../DebuggerLogicalBreakpointService.java | 42 +-
.../services/DebuggerStateEditingService.java | 47 +-
.../services/DebuggerTraceManagerService.java | 93 ++-
.../app/services/LogicalBreakpoint.java | 40 +
.../ghidra/app/services/StateEditingMode.java | 431 ++++++++++
.../ghidra/debug/flatapi/FlatDebuggerAPI.java | 5 +-
.../ghidra/pcode/exec/DebuggerPcodeUtils.java | 7 +-
.../DebuggerBreakpointsPluginScreenShots.java | 23 +-
.../stack/DebuggerStackPluginScreenShots.java | 3 +-
.../VariableValueHoverPluginScreenShots.java | 3 +-
.../disassemble/DebuggerDisassemblyTest.java | 15 +-
.../AbstractGhidraHeadedDebuggerGUITest.java | 18 +
.../DebuggerBreakpointMarkerPluginTest.java | 74 +-
...DebuggerBreakpointsProviderObjectTest.java | 87 +-
.../DebuggerBreakpointsProviderTest.java | 110 +++
.../control/DebuggerControlPluginTest.java | 43 +-
.../DebuggerMemoryBytesProviderTest.java | 17 +-
.../DebuggerRegistersProviderTest.java | 8 +-
.../DebuggerThreadsProviderLegacyTest.java | 51 --
.../thread/DebuggerThreadsProviderTest.java | 53 +-
.../watch/DebuggerWatchesProviderTest.java | 7 +-
...gerLogicalBreakpointServiceObjectTest.java | 87 +-
.../DebuggerLogicalBreakpointServiceTest.java | 126 ++-
.../DebuggerStateEditingServiceTest.java | 49 +-
.../DebuggerEmulationServiceTest.java | 127 +++
.../DebuggerTraceManagerServiceTest.java | 26 +-
.../core/debug/stack/StackUnwinderTest.java | 13 +-
.../debug/flatapi/FlatDebuggerAPITest.java | 9 +-
.../pcode/exec/trace/TraceSleighUtils.java | 4 +-
.../breakpoint/DBTraceBreakpoint.java | 70 +-
.../breakpoint/DBTraceBreakpointSpace.java | 2 +-
.../DBTraceObjectBreakpointLocation.java | 60 +-
.../DBTraceObjectBreakpointSpec.java | 23 +-
.../main/java/ghidra/trace/model/Trace.java | 10 +
.../model/breakpoint/TraceBreakpoint.java | 51 +-
.../model/breakpoint/TraceBreakpointKind.java | 2 +
.../TraceObjectBreakpointLocation.java | 7 +
.../trace/model/time/schedule/Scheduler.java | 12 +-
.../model/time/schedule/TraceSchedule.java | 21 +-
.../trace/AbstractTracePcodeEmulatorTest.java | 4 +-
.../trace/BytesTracePcodeEmulatorTest.java | 2 +-
.../RowWrappedEnumeratedColumnTableModel.java | 10 +-
.../pcode/emu/AbstractPcodeMachine.java | 59 +-
.../ghidra/pcode/emu/DefaultPcodeThread.java | 68 +-
.../java/ghidra/pcode/emu/PcodeMachine.java | 45 +-
.../pcode/emu/PcodeStateInitializer.java | 8 +-
.../java/ghidra/pcode/emu/PcodeThread.java | 1 +
.../pcode/emu/SleighInstructionDecoder.java | 4 +-
...InjectionErrorPcodeExecutionException.java | 26 +
.../java/ghidra/pcode/exec/PcodeExecutor.java | 14 +-
.../ghidra/pcode/exec/PcodeExpression.java | 2 +-
.../java/ghidra/pcode/exec/PcodeFrame.java | 4 +-
.../ghidra/pcode/exec/PcodeUseropLibrary.java | 2 +-
.../exec/SleighPcodeUseropDefinition.java | 4 +-
.../pcode/exec/SleighProgramCompiler.java | 4 +-
.../java/ghidra/pcode/exec/SleighUtils.java | 776 ++++++++++++++++++
.../ghidra/pcode/exec/SleighUtilsTest.java | 300 +++++++
116 files changed, 5676 insertions(+), 1993 deletions(-)
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/event/TraceInactiveCoordinatesPluginEvent.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/AbstractDebuggerSleighInputDialog.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerSleighExpressionInputDialog.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/breakpoint/DebuggerSleighSemanticInputDialog.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/DeleteEmuBreakpointActionItem.java
rename Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/{DeleteBreakpointActionItem.java => DeleteTargetBreakpointActionItem.java} (57%)
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/DisableEmuBreakpointActionItem.java
rename Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/{DisableBreakpointActionItem.java => DisableTargetBreakpointActionItem.java} (57%)
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/EnableEmuBreakpointActionItem.java
rename Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/{EnableBreakpointActionItem.java => EnableTargetBreakpointActionItem.java} (57%)
delete mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/PlaceBreakpointActionItem.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/PlaceEmuBreakpointActionItem.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/PlaceTargetBreakpointActionItem.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/ProgramBreakpoint.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/breakpoint/TraceBreakpointSet.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/StateEditingMode.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/InjectionErrorPcodeExecutionException.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/SleighUtils.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/test/java/ghidra/pcode/exec/SleighUtilsTest.java
diff --git a/Ghidra/Debug/Debugger/data/debugger.theme.properties b/Ghidra/Debug/Debugger/data/debugger.theme.properties
index 6cde8822ee..8079d12938 100644
--- a/Ghidra/Debug/Debugger/data/debugger.theme.properties
+++ b/Ghidra/Debug/Debugger/data/debugger.theme.properties
@@ -65,6 +65,7 @@ color.debugger.plugin.resources.breakpoint.marker.disabled.ineffective = color.d
icon.debugger.object.populated = object-populated.png
icon.debugger.object.unpopulated = object-unpopulated.png
+font.debugger.sleigh = font.monospaced
font.debugger.object.tree.renderer = Tahoma-plain-11
icon.debugger.display.graph = breakpoint-enable.png // TODO this icon was missing 'breakpoints.png'
@@ -168,10 +169,11 @@ icon.debugger.diff = table_relationship.png
icon.debugger.diff.previous = up.png
icon.debugger.diff.next = down.png
-icon.debugger.edit.mode.read.only = write-disabled.png
-icon.debugger.edit.mode.write.target = write-target.png
-icon.debugger.edit.mode.write.trace = write-trace.png
-icon.debugger.edit.mode.write.emulator = write-emulator.png
+icon.debugger.edit.mode.ro.target = record.png
+icon.debugger.edit.mode.rw.target = write-target.png
+icon.debugger.edit.mode.ro.trace = video-x-generic16.png
+icon.debugger.edit.mode.rw.trace = write-trace.png
+icon.debugger.edit.mode.rw.emulator = write-emulator.png
icon.debugger.marker.register = register-marker.png
icon.debugger.marker.event = icon.debugger.marker.register
diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html
index 4b73f04ca7..93887c6913 100644
--- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html
+++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointMarkerPlugin/DebuggerBreakpointMarkerPlugin.html
@@ -62,8 +62,8 @@
breakpoints on arbitrary expressions, use the Set
Breakpoint action of the Objects window. NOTE: These actions may also appear in
- other address-based contexts, e.g., the decompiler listing; however, those contexts often lack
- any indication of breakpoint presence or state.
+ other address-based contexts, but not all of those contexts include visual breakpoint
+ indicators.
Toggle
Breakpoint (K)
diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html
index 3d09ebaa36..40912e874d 100644
--- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html
+++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/DebuggerBreakpointsPlugin.html
@@ -22,126 +22,145 @@
- The breakpoints window tabulates and manipulates breakpoints among all live and traced
- targets. Only address-based breakpoints are tabulated. For other traps, e.g., "break on
+
The breakpoints window tabulates and manipulates breakpoints among all traces, including
+ live targets. Only address-based breakpoints are tabulated. For other traps, e.g., "break on
exception," see the Objects Window. Breakpoints
can also be manipulated from address-based views, especially the disassembly listings. See Breakpoints in
- the Listings. Display of breakpoints in other views, e.g., the decompiler, is not yet
- implemented.
+ the Listings.
- Individual breakpoint locations from among the targets are consolidated into logical
+
Individual breakpoint locations from among the traces are consolidated into logical
breakpoints, based on their addresses in the static listing. The static locations are typically
stored as bookmarks in their respective Ghidra programs, comprising the current breakpoint set.
See the Static Mappings
window for the finer details of address mapping. A breakpoint which cannot be mapped to a
static address becomes its own logical breakpoint at its dynamic address. The top table of the
- provider displays logical breakpoints; the bottom table displays breakpoint locations.
- NOTE: The breakpoints window cannot display or manipulate breakpoints from a target
- until that target is recorded into a trace. Furthermore, dead traces are not included. Nor are
- breakpoints from the past included, even when viewing past machine state.
+ provider displays logical breakpoints; the bottom table displays individual trace breakpoint
+ locations. NOTE: The breakpoints window cannot display or manipulate breakpoints from a
+ live target until that target is recorded into a trace. Only those breakpoints visible at the
+ current snapshot of each trace are included. For live targets, this is typically the latest
+ snapshot, i.e., the present.
Depending on what is supported by the connected debugger, breakpoints can trap a target when
an address or range is executed, read, or written; using software or hardware mechanisms. In
- case of "read" or "write," debuggers may differ in terminology, e.g., GDB might call them
- "watchpoints," but Ghidra still calls these "breakpoints." Some debuggers allow the user to
- specify a breakpoint location other than by address, but ultimately each specification is
- realized by 0 or more addressable locations. To accommodate this, the Objects window will
typically display a list of specifications, each listing its locations as children. However,
- the grouping of breakpoint locations into logical breakpoints by this manager is done
- without respect to the specifications. Often the specification is at a higher stratum
- than Ghidra natively understands, e.g., the source filename and line number, and so such
- specifications are not relevant. Note, however, that the model might not permit locations to be
- manipulated independently of their specification, which may limit how the manager can operate
- on each breakpoint location.
+ the grouping of breakpoint locations into logical breakpoints by Ghidra's breakpoint manager is
+ done without respect to the debugger's specifications. A specification may be at a
+ higher stratum than Ghidra natively understands, e.g., the source filename and line number, and
+ so such specifications are not relevant. Also note that the debugger might not permit locations
+ to be manipulated independently of their specifications. This may limit how Ghidra can operate,
+ since in that case, it must configure the specification, which may affect more locations than
+ intended.
+
+ When the control
+ mode is set to "trace" or "emulator," it is possible to rewind the trace to past snapshots
+ and examine old breakpoints. You may also emulate from those snapshots, even if the target is
+ no longer alive. By default, those historical breakpoints are disabled in the integrated
+ emulator, but they can be toggled in the usual ways. In addition, the locations can be
+ manipulated independently, since the emulator has its own breakpoint set. Emulated breakpoints
+ can be configured with conditions expressed in Sleigh using the Set
+ Condition action, or configured to replace the instruction's semantics altogether using the
+ Set Injection action.
Because of the logical grouping of breakpoints, it is possible for a breakpoint to be in a
mixed or inconsistent state. This happens quite commonly, e.g., when a breakpoint is placed in
- a Ghidra program before that program is mapped in any traced target. Once mapped in, the
- location of that breakpoint in the trace is computed and noted as missing. A logical breakpoint
- without any location in a trace (i.e., on an actual target) is called ineffective and
- is drawn in grey, e.g.:
. An enabled
- logical breakpoint having a disabled location is called inconsistent and its icon will
- include an exclamation mark:
. A
- disabled logical breakpoint having an enabled location is similarly inconsistent. Toggling an
- ineffective or inconsistent logical breakpoint enables and/or places all its locations, aiming
- for a consistent enabled state. Toggling it again disables all locations.
+ a Ghidra program before that program is mapped to any trace. Once mapped, the location of that
+ breakpoint in the trace is computed and noted as missing. A logical breakpoint without any
+ location in a trace is called ineffective and is drawn in grey, e.g.:
. An enabled logical breakpoint having a disabled location
+ is called inconsistent and its icon will include an exclamation mark:
. A disabled logical breakpoint having an enabled
+ location is similarly inconsistent. Toggling an ineffective or inconsistent logical breakpoint
+ enables and/or places all its mapped locations, aiming for a consistent enabled state. Toggling
+ it again disables all locations.
Tables and Columns
The top table, which lists logical breakpoints, has the following columns:
- - State - displays an icon indicating the state of the breakpoint. If rendered in grey, the
- breakpoint has no locations, i.e., it is ineffective. If rendered with an exclamation mark
- overlay, the breakpoint is inconsistent. Clicking the icon toggles the breakpoint.
+ - State: displays an icon indicating the state of the breakpoint. If rendered in
+ grey, the breakpoint has no locations, i.e., it is ineffective. If rendered with an
+ exclamation mark overlay, the breakpoint is inconsistent. Clicking the icon toggles the
+ breakpoint.
-
Enabled: The logical breakpoint,
- including all its locations, is enabled.
+
Enabled: The logical
+ breakpoint, including all its locations, is enabled.
-
Disabled: The logical breakpoint,
- including all its locations, is disabled.
+
Disabled: The logical
+ breakpoint, including all its locations, is disabled.
-
Mixed: (Listing only) Two logical
- breakpoints at the same address have different states.
+
Mixed: (Listing only) Two
+ logical breakpoints at the same address have different states.
- - Name - gives the user-defined name of the breakpoint. This cell is only populated and
- modifiable when the breakpoint is bookmarked in a program, since the name is associated with
- the static location.
+ - Name: gives the user-defined name of the breakpoint. This cell is only populated
+ and modifiable when the breakpoint is bookmarked in a program, since the name is associated
+ with the static location.
- - Address - gives the address of the breakpoint. This is typically the static address. If
- the breakpoint cannot be mapped to a static address, this is its dynamic address.
+ - Address: gives the address of the breakpoint. This is typically the static
+ address. If the breakpoint cannot be mapped to a static address, this is its dynamic
+ address.
- - Image - gives the name of the static image, i.e., Ghidra program. If the breakpoint
+
- Image: gives the name of the static image, i.e., Ghidra program. If the breakpoint
cannot be mapped to a static location, this is blank.
- - Length - usually 1. For access breakpoints, this is the length of the address range (in
- bytes).
+ - Length: usually 1. For access breakpoints, this is the length in bytes of the
+ address range.
- - Kinds - indicates the kind(s) of breakpoint: SW_EXECUTE, HW_EXECUTE, READ, and/or
+
- Kinds: indicates the kind(s) of breakpoint: SW_EXECUTE, HW_EXECUTE, READ, and/or
WRITE.
- - Locations - counts the number of locations included in this logical breakpoint, applying
- the trace filter if active. Note that a logical breakpoint with 0 locations is
+
- Locations: counts the number of locations included in this logical breakpoint,
+ applying the trace filter if active. Note that a logical breakpoint with 0 locations is
ineffective.
+
+ - Sleigh: indicates whether or not the breakpoint has a customized Sleigh
+ configuration. This is only relevant for emulation.
The bottom table, which lists breakpoint locations, has the following columns:
- - State - displays an icon indicating the state of the location. If rendered with an
+
- State: displays an icon indicating the state of the location. If rendered with an
exclamation mark overlay, the location does not agree with its logical breakpoint, or it
cannot be bookmarked. Clicking the icon toggles the location.
-
Enabled: The location is
+
Enabled: The location is
enabled.
-
Disabled: The location is
+
Disabled: The location is
disabled.
-
Mixed: (Listing only) Two locations at
- the same address have different states.
+
Mixed: (Listing only) Two
+ locations at the same address have different states.
- - Name - displays the name given to the location by the connected debugger. This field is
- user modifiable.
-
- - Address - gives the dynamic address of this location.
-
- - Trace - gives the name of the location's trace.
-
- - Threads - (hidden by default) if the breakpoint applies to a limited set of threads,
- gives the list of threads.
-
- - Comment - gives a user comment — the specification's expression by default. This
+
- Name: displays the name given to the location by the connected debugger. This
field is user modifiable.
+
+ - Address: gives the dynamic address of this location.
+
+ - Trace: gives the name of the location's trace.
+
+ - Threads: (hidden by default) if the breakpoint applies to a limited set of
+ threads, gives the list of threads.
+
+ - Comment: gives a user comment — the specification's expression by default.
+ This field is user modifiable.
+
+ - Sleigh: (hidden by default) indicates whether or not the location has a customized
+ Sleigh configuration. This is only relevant for emulation.
Breakpoint Actions
@@ -194,6 +213,124 @@
This action is always available. Use with caution! It deletes every
breakpoint.
+ Set Condition (Emulator)
+
+ This action is available when all selected locations are emulated execution breakpoints.
+ (Conditional access breakpoints are not yet implemented.) It sets the condition using a Sleigh
+ expression that when true will trap the emulator. When false, the emulator continues past the
+ breakpoint without interruption. Sleigh operates similarly to C: zero is considered false,
+ while everything else is considered true. The dialog provides syntax checking, but does not
+ verify the semantics. If the breakpoint condition is not semantically correct, then the
+ breakpoint behaves as if unconditional; it will interrupt the emulator then indicate the
+ semantic error. To trap unconditionally (the default) use 1:1. Otherwise, use a
+ boolean Sleigh expression, such as RAX >= 0x1000. Sleigh conditions are rather
+ expressive. For example, on an x86 target, you might place a breakpoint at the entry of a
+ function and set the condition to (*:8 RSP) & 0xfff00000 == 0x00400000. This
+ will break on calls to the function from any address matching 0x004?????.
+
+ Set Injection (Emulator)
+
+ This action is available when all selected locations are emulated execution breakpoints.
+ (Injections on access breakpoints are not yet implemented.) It replaces the instruction's usual
+ Sleigh semantics with those entered into the dialog. The Sleigh syntax is the same as used in
+ the processor language's Sleigh specification (.slaspec and .sinc
+ files). The dialog provides syntax checking, but does not verify the semantics. If the
+ injection is not semantically correct, then the breakpoint behaves as if unconditional; it will
+ interrupt the emulator then indicate the semantic error. NOTE: The semantics at the
+ breakpoint address are completely replaced, ignoring the original instruction
+ entirely. This includes its control flow behavior, even fall through. The replacement semantics
+ must provide control flow behavior, or else the emulator's program counter will not
+ advance, and the same injection will be executed repeatedly. Here are three ways to provide
+ control flow:
+
+
+ - Call the
emu_exec_decoded() userop: This is probably the most common method,
+ and is usually the last Sleigh statement in the injected semantics. This userop, which is
+ defined by the emulator, instructs it to decode and execute the instruction at the program
+ counter, effectively incorporating the original instruction's semantics. If this is not the
+ last statement of the injection, please consider: If the instruction transfers control, the
+ remainder of the injection is not executed. If the instruction falls through, the
+ remainder of the injection is executed.
+
+ - Call the
emu_skip_decoded() userop: This is a less common method, and is
+ usually the last Sleigh statement in the injected semantics. This userop, which is defined by
+ the emulator, instructs it to decode but skip the instruction at the program counter.
+ (Decoding is necessary to determine the instruction's length.) Use this when the intent is to
+ replace the original instruction's semantics. This will ensure the program counter advances
+ without actually executing the original instruction. No matter the original instruction's
+ control flow, this imposes fall through. It may be used to skip over function calls or
+ jumps.
+
+ - Use a control transfer statement: This is probably the second most common method, and
+ includes the Sleigh keywords
call, goto, and return.
+ Note that just as in processor specifications, a control transfer statement will be the last
+ statement executed for the injection. It immediately sets the program counter, skipping the
+ remainder of the injection.
+
+
+ Here are a few examples:
+
+
+ -
+ An unconditional breakpoint. This is the default injection. The first statement calls the
+
emu_swi() "emulator software interrupt" userop, which is defined by the
+ emulator. The second statement incorporates the semantics of the original instruction:
+
+emu_swi();
+emu_exec_decoded();
+
+
+
+ -
+ A conditional breakpoint for
RAX >= 0x1000. This is a simple extension of
+ the unconditional breakpoint. The emu_swi() call is skipped if the inverse of
+ the condition is true:
+
+if RAX < 0x1000 goto <L1>;
+ emu_swi();
+<L1>
+emu_exec_decoded();
+
+
+
+ -
+ Stub a function, returning 0. This depends on the architecture and calling convention. Take
+ the AMD64 System V calling convention for example —
+
x86:LE:64:default:gcc. The injection, located at the function's entry or in
+ the program linkage table, would place the return value into the expected storage location
+ then replicate the behavior of RET:
+
+RAX = 0;
+RIP = *:8 RSP;
+RSP = RSP + 8;
+return [RIP];
+
+
+
+ -
+ Force a
JZ to be taken, without modifying the image. This depends on the
+ architecture. Take x86 for example. The injection, located on the conditional jump, would
+ simply set the flag accordingly then execute the original instruction:
+
+ZF = 1;
+emu_exec_decoded();
+
+ Alternatively, suppose the example instruction is JZ 0x00401234. Then, the
+ injection can jump straight to the target:
+
+goto [0x00401234];
+
+
+
+ -
+ Force a
JZ to fall through, without modifying the image. The injection,
+ located on the conditional jump, would simply skip the instruction:
+
+emu_skip_decoded();
+
+
+
+
Filter Actions
For organizing breakpoints the manager provides the following actions:
diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerBreakpointsPlugin/images/DebuggerBreakpointsPlugin.png
index 41ffdea30a8115f4b8e32b8c6134bf6e5c5db8a5..46fcfafe1e0e62509d43b009bf5d00b121c7827e 100644
GIT binary patch
literal 27493
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
E2RyT9`v3p{
literal 27939
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%0DCEyIFUxyt8
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