Class ModifiedPcodeThread<T>
- All Implemented Interfaces:
PcodeThread<T>
- Direct Known Subclasses:
AuxPcodeThread
,BytesPcodeThread
All machines that include a concrete state piece, i.e., all emulators, should use threads derived
from this class. This implementation assumes that the modified state can be concretized. This
doesn't necessarily require the machine to be a concrete emulator, but an abstract machine must
avoid or handle ConcretionError
s arising from state modifiers.
For a complete example of a p-code emulator, see PcodeEmulator
.
TODO: "State modifiers" are a feature of the older Emulator
. They are crudely
incorporated into threads extended from this abstract class, so that they do not yet need to be
ported to this emulator.
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
Glue for incorporating state modifiersNested classes/interfaces inherited from class ghidra.pcode.emu.DefaultPcodeThread
DefaultPcodeThread.PcodeEmulationLibrary<T>, DefaultPcodeThread.PcodeThreadExecutor<T>
-
Field Summary
Modifier and TypeFieldDescriptionprotected final Emulate
protected final EmulateInstructionStateModifier
Part of the glue that makes existing state modifiers work in new emulation frameworkFields inherited from class ghidra.pcode.emu.DefaultPcodeThread
arithmetic, contextreg, decoder, defaultContext, executor, frame, injects, instruction, language, library, pc, state
-
Constructor Summary
ConstructorDescriptionModifiedPcodeThread
(String name, AbstractPcodeMachine<T> machine) Construct a new thread with the given name belonging to the given machine -
Method Summary
Modifier and TypeMethodDescriptionprotected EmulateInstructionStateModifier
Construct a modifier for the given languageprotected boolean
onMissingUseropDef
(PcodeOp op, String opName) Extension point: Behavior when a p-code userop definition is not foundvoid
overrideCounter
(Address counter) Set the thread's program counter and write the pc register of its executor stateprotected void
Extension point: Extra behavior after executing an instructionMethods inherited from class ghidra.pcode.emu.DefaultPcodeThread
advanceAfterFinished, assertCompletedInstruction, assertMidInstruction, assignContext, beginInstructionOrInject, branchToAddress, checkLoad, checkStore, clearAllInjects, clearInject, createExecutor, createInstructionDecoder, createUseropLibrary, doPluggableInitialization, dropInstruction, executeInstruction, finishInstruction, getArithmetic, getContext, getContextAfterCommits, getCounter, getExecutor, getFrame, getInject, getInstruction, getLanguage, getMachine, getName, getState, getUseropLibrary, inject, isSuspended, overrideContext, overrideContextWithDefault, preExecuteInstruction, reInitialize, run, setCounter, setSuspended, skipInstruction, skipPcodeOp, stepInstruction, stepPatch, stepPcodeOp, stepped, swi, writeCounter
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface ghidra.pcode.emu.PcodeThread
stepInstruction, stepPcodeOp
-
Field Details
-
modifier
Part of the glue that makes existing state modifiers work in new emulation frameworkNOTE: These are instantiated one per thread, rather than sharing one across the machine, because some of the modifiers are stateful and assume a single-threaded model. The best way to mitigate that assumption is to ensure a modifier is responsible for only a single thread, even though a machine may have multiple threads.
-
emulate
-
-
Constructor Details
-
ModifiedPcodeThread
Construct a new thread with the given name belonging to the given machine- Parameters:
name
- the name of the new threadmachine
- the machine to which the new thread belongs- See Also:
-
-
Method Details
-
createModifier
Construct a modifier for the given language- Returns:
- the state modifier
-
overrideCounter
Description copied from interface:PcodeThread
Set the thread's program counter and write the pc register of its executor stateWarning: Setting the counter into the middle of group constructs, e.g., parallel instructions or delay-slotted instructions, may cause undefined behavior.
- Specified by:
overrideCounter
in interfacePcodeThread<T>
- Overrides:
overrideCounter
in classDefaultPcodeThread<T>
- Parameters:
counter
- the new target address- See Also:
-
postExecuteInstruction
protected void postExecuteInstruction()Description copied from class:DefaultPcodeThread
Extension point: Extra behavior after executing an instructionThis is currently used for incorporating state modifiers from the older
Emulator
framework. There is likely utility here when porting those to this framework.- Overrides:
postExecuteInstruction
in classDefaultPcodeThread<T>
-
onMissingUseropDef
Description copied from class:DefaultPcodeThread
Extension point: Behavior when a p-code userop definition is not found- Overrides:
onMissingUseropDef
in classDefaultPcodeThread<T>
- Parameters:
op
- the opopName
- the name of the p-code userop- Returns:
- true if handle, false if still undefined
-