Enum Class BytesPcodeArithmetic
- All Implemented Interfaces:
PcodeArithmetic<byte[]>
,Serializable
,Comparable<BytesPcodeArithmetic>
,Constable
The arithmetic interprets the arrays as big- or little-endian values, then performs the
arithmetic as specified by the p-code operation. The implementation defers to OpBehavior
.
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>>
Nested classes/interfaces inherited from interface ghidra.pcode.exec.PcodeArithmetic
PcodeArithmetic.Purpose
-
Enum Constant Summary
Enum ConstantDescriptionThe instance which interprets arrays as big-endian valuesThe instance which interprets arrays as little-endian values -
Field Summary
Fields inherited from interface ghidra.pcode.exec.PcodeArithmetic
SIZEOF_SIZEOF
-
Method Summary
Modifier and TypeMethodDescriptionbyte[]
binaryOp
(int opcode, int sizeout, int sizein1, byte[] in1, int sizein2, byte[] in2) Apply a binary operator to the given inputsstatic BytesPcodeArithmetic
forEndian
(boolean bigEndian) Obtain the instance for the given endiannessstatic BytesPcodeArithmetic
forLanguage
(Language language) Obtain the instance for the given language's endiannessbyte[]
fromConst
(byte[] value) Convert the given constant concrete value to typeT
having the same size.Get the endianness of this arithmeticbyte[]
modAfterLoad
(int sizeout, int sizeinAddress, byte[] inAddress, int sizeinValue, byte[] inValue) Apply any modifications after a value is loadedbyte[]
modBeforeStore
(int sizeout, int sizeinAddress, byte[] inAddress, int sizeinValue, byte[] inValue) Apply any modifications before a value is storedlong
sizeOf
(byte[] value) Get the size in bytes, if possible, of the given abstract valuebyte[]
toConcrete
(byte[] value, PcodeArithmetic.Purpose purpose) Convert, if possible, the given abstract value to a concrete byte arraybyte[]
unaryOp
(int opcode, int sizeout, int sizein1, byte[] in1) Apply a unary operator to the given inputstatic BytesPcodeArithmetic
Returns the enum constant of this class with the specified name.static BytesPcodeArithmetic[]
values()
Returns an array containing the constants of this enum class, in the order they are declared.Methods inherited from class java.lang.Enum
clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf
Methods inherited from interface ghidra.pcode.exec.PcodeArithmetic
binaryOp, fromConst, fromConst, fromConst, isTrue, ptrAdd, ptrSub, sizeOfAbstract, toBigInteger, toLong, unaryOp
-
Enum Constant Details
-
BIG_ENDIAN
The instance which interprets arrays as big-endian values -
LITTLE_ENDIAN
The instance which interprets arrays as little-endian values
-
-
Method Details
-
values
Returns an array containing the constants of this enum class, in the order they are declared.- Returns:
- an array containing the constants of this enum class, in the order they are declared
-
valueOf
Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
IllegalArgumentException
- if this enum class has no constant with the specified nameNullPointerException
- if the argument is null
-
forEndian
Obtain the instance for the given endianness- Parameters:
bigEndian
- true forBIG_ENDIAN
, false ofLITTLE_ENDIAN
- Returns:
- the arithmetic
-
forLanguage
Obtain the instance for the given language's endianness- Parameters:
language
- the language- Returns:
- the arithmetic
-
getEndian
Description copied from interface:PcodeArithmetic
Get the endianness of this arithmeticOften T is a byte array, or at least represents one abstractly. Ideally, it is an array where each element is an abstraction of a byte. If that is the case, then the arithmetic likely has to interpret those bytes as integral values according to an endianness. This should return that endianness.
If the abstraction has no notion of endianness, return null. In that case, the both
PcodeArithmetic.fromConst(BigInteger, int, boolean)
andPcodeArithmetic.fromConst(long, int)
must be overridden. Furthermore, unlessPcodeArithmetic.toConcrete(Object, Purpose)
is guaranteed to throw an exception, thenPcodeArithmetic.toBigInteger(Object, Purpose)
andPcodeArithmetic.toLong(Object, Purpose)
must also be overridden.- Specified by:
getEndian
in interfacePcodeArithmetic<byte[]>
- Returns:
- the endianness or null
-
unaryOp
public byte[] unaryOp(int opcode, int sizeout, int sizein1, byte[] in1) Description copied from interface:PcodeArithmetic
Apply a unary operator to the given inputNote the sizes of variables are given, because values don't necessarily have an intrinsic size. For example, a
BigInteger
may have a minimum encoding size, but that does not necessarily reflect the size of the variable from which is was read.- Specified by:
unaryOp
in interfacePcodeArithmetic<byte[]>
- Parameters:
opcode
- the p-code opcodesizeout
- the size (in bytes) of the output variablesizein1
- the size (in bytes) of the input variablein1
- the input value- Returns:
- the output value
-
binaryOp
public byte[] binaryOp(int opcode, int sizeout, int sizein1, byte[] in1, int sizein2, byte[] in2) Description copied from interface:PcodeArithmetic
Apply a binary operator to the given inputsNote the sizes of variables are given, because values don't necessarily have an intrinsic size. For example, a
BigInteger
may have a minimum encoding size, but that does not necessarily reflect the size of the variable from which is was read.- Specified by:
binaryOp
in interfacePcodeArithmetic<byte[]>
- Parameters:
opcode
- the operation's opcode. SeePcodeOp
.sizeout
- the size (in bytes) of the output variablesizein1
- the size (in bytes) of the first (left) input variablein1
- the first (left) input valuesizein2
- the size (in bytes) of the second (right) input variablein2
- the second (right) input value- Returns:
- the output value
-
modBeforeStore
public byte[] modBeforeStore(int sizeout, int sizeinAddress, byte[] inAddress, int sizeinValue, byte[] inValue) Description copied from interface:PcodeArithmetic
Apply any modifications before a value is storedThis implements any abstractions associated with
PcodeOp.STORE
. This is called on the address/offset and the value before the value is actually stored into the state.- Specified by:
modBeforeStore
in interfacePcodeArithmetic<byte[]>
- Parameters:
sizeout
- the size (in bytes) of the output variablesizeinAddress
- the size (in bytes) of the variable used for indirectioninAddress
- the value used as the address (or offset)sizeinValue
- the size (in bytes) of the variable to storeinValue
- the value to store- Returns:
- the modified value to store
-
modAfterLoad
public byte[] modAfterLoad(int sizeout, int sizeinAddress, byte[] inAddress, int sizeinValue, byte[] inValue) Description copied from interface:PcodeArithmetic
Apply any modifications after a value is loadedThis implements any abstractions associated with
PcodeOp.LOAD
. This is called on the address/offset and the value after the value is actually loaded from the state.- Specified by:
modAfterLoad
in interfacePcodeArithmetic<byte[]>
- Parameters:
sizeout
- the size (in bytes) of the output variablesizeinAddress
- the size (in bytes) of the variable used for indirectioninAddress
- the value used as the address (or offset)sizeinValue
- the size (in bytes) of the variable loadedinValue
- the value loaded- Returns:
- the modified value loaded
-
fromConst
public byte[] fromConst(byte[] value) Description copied from interface:PcodeArithmetic
Convert the given constant concrete value to typeT
having the same size.- Specified by:
fromConst
in interfacePcodeArithmetic<byte[]>
- Parameters:
value
- the constant value- Returns:
- the value as a
T
-
toConcrete
Description copied from interface:PcodeArithmetic
Convert, if possible, the given abstract value to a concrete byte array- Specified by:
toConcrete
in interfacePcodeArithmetic<byte[]>
- Parameters:
value
- the abstract valuepurpose
- the purpose for which the emulator needs a concrete value- Returns:
- the array
-
sizeOf
public long sizeOf(byte[] value) Description copied from interface:PcodeArithmetic
Get the size in bytes, if possible, of the given abstract valueIf the abstract value does not conceptually have a size, throw an exception.
- Specified by:
sizeOf
in interfacePcodeArithmetic<byte[]>
- Parameters:
value
- the abstract value- Returns:
- the size in bytes
-