Class PairedPcodeExecutorStatePiece<A,L,R>
- Type Parameters:
A- the type of offset, usually the type of a controlling stateL- the type of the "left" stateR- the type of the "right" state
- All Implemented Interfaces:
PcodeExecutorStatePiece<A,org.apache.commons.lang3.tuple.Pair<L, R>>
This composes two delegate pieces "left" and "right" creating a single piece which stores pairs of values, where the left component has the value type of the left piece, and the right component has the value type of the right piece. Both pieces must have the same address type. Every operation on this piece is decomposed into operations upon the delegate pieces, and the final result composed from the results of those operations.
To compose three or more states, first ask if it is really necessary. Second, consider
implementing the PcodeExecutorStatePiece interface for a record type. Third, use the
Church-style triple. In that third case, it is recommended to compose the nested pair on the
right of the top pair: Compose the two right pieces into a single piece, then use
PairedPcodeExecutorState to compose a concrete state with the composed piece, yielding a
state of triples. This can be applied ad nauseam to compose arbitrarily large tuples; however, at
a certain point clients should consider creating a record and implementing the state piece and/or
state interface. It's helpful to use this implementation as a reference. Alternatively, the
Debugger module has a WatchValuePcodeExecutorState which follows this
recommendation.
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface ghidra.pcode.exec.PcodeExecutorStatePiece
PcodeExecutorStatePiece.Reason -
Constructor Summary
ConstructorsConstructorDescriptionPairedPcodeExecutorStatePiece(PcodeExecutorStatePiece<A, L> left, PcodeExecutorStatePiece<A, R> right) PairedPcodeExecutorStatePiece(PcodeExecutorStatePiece<A, L> left, PcodeExecutorStatePiece<A, R> right, PcodeArithmetic<A> addressArithmetic, PcodeArithmetic<org.apache.commons.lang3.tuple.Pair<L, R>> arithmetic) -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Erase the entire state or piecefork()Create a deep copy of this stateGet the arithmetic used to manipulate addresses of the type used by this statePcodeArithmetic<org.apache.commons.lang3.tuple.Pair<L, R>> Get the arithmetic used to manipulate values of the type stored by this stategetConcreteBuffer(Address address, PcodeArithmetic.Purpose purpose) Bind a buffer of concrete bytes at the given start addressGet the language defining the address spaces of this state piecegetLeft()Get the delegate backing the left side of paired valuesGet all register values known to this stategetRight()Get the delegate backing the right side of paired valuesgetVar(AddressSpace space, A offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Get the value of a variablevoidsetVar(AddressSpace space, A offset, int size, boolean quantize, org.apache.commons.lang3.tuple.Pair<L, R> val) Set the value of a variableMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface ghidra.pcode.exec.PcodeExecutorStatePiece
checkRange, getVar, getVar, getVar, getVar, quantizeOffset, setVar, setVar, setVar, setVar
-
Constructor Details
-
PairedPcodeExecutorStatePiece
public PairedPcodeExecutorStatePiece(PcodeExecutorStatePiece<A, L> left, PcodeExecutorStatePiece<A, R> right, PcodeArithmetic<A> addressArithmetic, PcodeArithmetic<org.apache.commons.lang3.tuple.Pair<L, R>> arithmetic) -
PairedPcodeExecutorStatePiece
public PairedPcodeExecutorStatePiece(PcodeExecutorStatePiece<A, L> left, PcodeExecutorStatePiece<A, R> right)
-
-
Method Details
-
getLanguage
Description copied from interface:PcodeExecutorStatePieceGet the language defining the address spaces of this state piece- Specified by:
getLanguagein interfacePcodeExecutorStatePiece<A,L> - Returns:
- the language
-
getAddressArithmetic
Description copied from interface:PcodeExecutorStatePieceGet the arithmetic used to manipulate addresses of the type used by this state- Specified by:
getAddressArithmeticin interfacePcodeExecutorStatePiece<A,L> - Returns:
- the address (or offset) arithmetic
-
getArithmetic
Description copied from interface:PcodeExecutorStatePieceGet the arithmetic used to manipulate values of the type stored by this state- Specified by:
getArithmeticin interfacePcodeExecutorStatePiece<A,L> - Returns:
- the arithmetic
-
getRegisterValues
Description copied from interface:PcodeExecutorStatePieceGet all register values known to this stateWhen the state acts as a cache, it should only return those cached.
- Specified by:
getRegisterValuesin interfacePcodeExecutorStatePiece<A,L> - Returns:
- a map of registers and their values
-
fork
Description copied from interface:PcodeExecutorStatePieceCreate a deep copy of this state- Specified by:
forkin interfacePcodeExecutorStatePiece<A,L> - Returns:
- the copy
-
setVar
public void setVar(AddressSpace space, A offset, int size, boolean quantize, org.apache.commons.lang3.tuple.Pair<L, R> val) Description copied from interface:PcodeExecutorStatePieceSet the value of a variable- Specified by:
setVarin interfacePcodeExecutorStatePiece<A,L> - Parameters:
space- the address spaceoffset- the offset within the spacesize- the size of the variablequantize- true to quantize to the language's "addressable unit"val- the value
-
getVar
public org.apache.commons.lang3.tuple.Pair<L,R> getVar(AddressSpace space, A offset, int size, boolean quantize, PcodeExecutorStatePiece.Reason reason) Description copied from interface:PcodeExecutorStatePieceGet the value of a variable- Specified by:
getVarin interfacePcodeExecutorStatePiece<A,L> - Parameters:
space- the address spaceoffset- the offset within the spacesize- the size of the variablequantize- true to quantize to the language's "addressable unit"reason- the reason for reading the variable- Returns:
- the value
-
getConcreteBuffer
Description copied from interface:PcodeExecutorStatePieceBind a buffer of concrete bytes at the given start address- Specified by:
getConcreteBufferin interfacePcodeExecutorStatePiece<A,L> - Parameters:
address- the start addresspurpose- the reason why the emulator needs a concrete value- Returns:
- a buffer
-
getLeft
Get the delegate backing the left side of paired values- Returns:
- the left piece
-
getRight
Get the delegate backing the right side of paired values- Returns:
- the right piece
-
clear
public void clear()Description copied from interface:PcodeExecutorStatePieceErase the entire state or pieceThis is generally only useful when the state is itself a cache to another object. This will ensure the state is reading from that object rather than a stale cache. If this is not a cache, this could in fact clear the whole state, and the machine using it will be left in the dark.
- Specified by:
clearin interfacePcodeExecutorStatePiece<A,L>
-