Package ghidra.pcode.emu.jit.alloc
Enum Class NoHandler
- All Implemented Interfaces:
VarHandler,Serializable,Comparable<NoHandler>,Constable
A dummy handler for values/variables that are not allocated in JVM locals
Every operation on this handler will throw an exception at code generation time.
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Enum
Enum.EnumDesc<E extends Enum<E>> -
Enum Constant Summary
Enum Constants -
Method Summary
Modifier and TypeMethodDescription<N extends Emitter.Next>
Emitter<Emitter.Ent<N, Types.TInt>> genLoadLegToStack(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, int leg, Opnd.Ext ext) Emit bytecode to load one leg of a multi-precision value from the varnode onto the JVM stack.<N extends Emitter.Next>
Emitter<Emitter.Ent<N, Types.TRef<int[]>>> genLoadToArray(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope, int slack) Emit bytecode to load the varnode's value into an integer array in little-endian order, pushing its ref onto the JVM stack.<N extends Emitter.Next>
Emitter<Emitter.Ent<N, Types.TInt>> genLoadToBool(Emitter<N> em, JitCodeGenerator<?> gen) Emit bytecode to load the varnode's value, interpreted as a boolean, as an integer onto the JVM stack.<N extends Emitter.Next>
Opnd.OpndEm<JitType.MpIntJitType, N> genLoadToOpnd(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope) Emit bytecode to load the varnode's value into several locals.<TT extends Types.BPrim<?>,TJT extends JitType.SimpleJitType<TT, TJT>, N extends Emitter.Next>
Emitter<Emitter.Ent<N, TT>> genLoadToStack(Emitter<N> em, JitCodeGenerator<?> gen, TJT type, Opnd.Ext ext) Emit bytecode to load the varnode's value onto the JVM stack.<N1 extends Emitter.Next,N0 extends Emitter.Ent<N1, Types.TRef<int[]>>>
Emitter<N1> genStoreFromArray(Emitter<N0> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope) Emit bytecode to store a varnode's value from an array of integer legs, in little endian order<N extends Emitter.Next>
Emitter<N> genStoreFromOpnd(Emitter<N> em, JitCodeGenerator<?> gen, Opnd<JitType.MpIntJitType> opnd, Opnd.Ext ext, Scope scope) Emit bytecode to store a varnode's value from several locals.<FT extends Types.BPrim<?>,FJT extends JitType.SimpleJitType<FT, FJT>, N1 extends Emitter.Next, N0 extends Emitter.Ent<N1, FT>>
Emitter<N1> genStoreFromStack(Emitter<N0> em, JitCodeGenerator<?> gen, FJT type, Opnd.Ext ext, Scope scope) Emit bytecode to store a value into a variable from the JVM stack.Create a handler for aPcodeOp.SUBPIECEof a value.type()Get the p-code type of the local variable this handler uses.static NoHandlerReturns the enum constant of this class with the specified name.static NoHandler[]values()Returns an array containing the constants of this enum class, in the order they are declared.vn()Get the complete varnode accessible to this handlerMethods inherited from class java.lang.Enum
clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOfMethods inherited from interface ghidra.pcode.emu.jit.alloc.VarHandler
name
-
Enum Constant Details
-
INSTANCE
Singleton
-
-
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
-
vn
Description copied from interface:VarHandlerGet the complete varnode accessible to this handler- Specified by:
vnin interfaceVarHandler- Returns:
- the varnode
-
type
Description copied from interface:VarHandlerGet the p-code type of the local variable this handler uses.- Specified by:
typein interfaceVarHandler- Returns:
- the type
-
genLoadToStack
public <TT extends Types.BPrim<?>,TJT extends JitType.SimpleJitType<TT, Emitter<Emitter.Ent<N,TJT>, N extends Emitter.Next> TT>> genLoadToStack(Emitter<N> em, JitCodeGenerator<?> gen, TJT type, Opnd.Ext ext) Description copied from interface:VarHandlerEmit bytecode to load the varnode's value onto the JVM stack.- Specified by:
genLoadToStackin interfaceVarHandler- Type Parameters:
TT- the JVM type of the value to load onto the stackTJT- the p-code type of the value to load onto the stackN- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the value expected on the JVM stack by the proceeding bytecodeext- the kind of extension to apply when adjusting from JVM size to varnode size- Returns:
- the emitter typed with the resulting stack
-
genLoadToOpnd
public <N extends Emitter.Next> Opnd.OpndEm<JitType.MpIntJitType,N> genLoadToOpnd(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope) Description copied from interface:VarHandlerEmit bytecode to load the varnode's value into several locals.- Specified by:
genLoadToOpndin interfaceVarHandler- Type Parameters:
N- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the value expected on the JVM stack by the proceeding bytecodeext- the kind of extension to applyscope- a scope for generating temporary local storage- Returns:
- the operand containing the locals, and the emitter typed with the incoming stack
-
genLoadLegToStack
public <N extends Emitter.Next> Emitter<Emitter.Ent<N,Types.TInt>> genLoadLegToStack(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, int leg, Opnd.Ext ext) Description copied from interface:VarHandlerEmit bytecode to load one leg of a multi-precision value from the varnode onto the JVM stack.- Specified by:
genLoadLegToStackin interfaceVarHandler- Type Parameters:
N- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the complete multi-precision valueleg- the index of the leg to load, 0 being least significantext- the kind of extension to apply- Returns:
- the emitter typed with the resulting stack, i.e., having the int leg pushed onto it
-
genLoadToArray
public <N extends Emitter.Next> Emitter<Emitter.Ent<N,Types.TRef<int[]>>> genLoadToArray(Emitter<N> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope, int slack) Description copied from interface:VarHandlerEmit bytecode to load the varnode's value into an integer array in little-endian order, pushing its ref onto the JVM stack.- Specified by:
genLoadToArrayin interfaceVarHandler- Type Parameters:
N- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the complete multi-precision valueext- the kind of extension to applyscope- a scope for generating temporary local storageslack- the number of additional, more significant, elements to allocate in the array- Returns:
- the emitter typed with the resulting stack, i.e., having the ref pushed onto it
-
genLoadToBool
public <N extends Emitter.Next> Emitter<Emitter.Ent<N,Types.TInt>> genLoadToBool(Emitter<N> em, JitCodeGenerator<?> gen) Description copied from interface:VarHandlerEmit bytecode to load the varnode's value, interpreted as a boolean, as an integer onto the JVM stack.- Specified by:
genLoadToBoolin interfaceVarHandler- Type Parameters:
N- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generator- Returns:
- the emitter typed with the resulting stack, i.e., having the int boolean pushed onto it
-
genStoreFromStack
public <FT extends Types.BPrim<?>,FJT extends JitType.SimpleJitType<FT, Emitter<N1> genStoreFromStackFJT>, N1 extends Emitter.Next, N0 extends Emitter.Ent<N1, FT>> (Emitter<N0> em, JitCodeGenerator<?> gen, FJT type, Opnd.Ext ext, Scope scope) Description copied from interface:VarHandlerEmit bytecode to store a value into a variable from the JVM stack.- Specified by:
genStoreFromStackin interfaceVarHandler- Type Parameters:
FT- the JVM type of the value on the stackFJT- the p-code type of the value on the stackN1- the tail of the incoming stackN0- the incoming stack having the value to store on top- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the value on the stackext- the kind of extension to applyscope- a scope for generating temporary local storage- Returns:
- the emitter typed with the resulting stack, i.e., having popped the value
-
genStoreFromOpnd
public <N extends Emitter.Next> Emitter<N> genStoreFromOpnd(Emitter<N> em, JitCodeGenerator<?> gen, Opnd<JitType.MpIntJitType> opnd, Opnd.Ext ext, Scope scope) Description copied from interface:VarHandlerEmit bytecode to store a varnode's value from several locals.- Specified by:
genStoreFromOpndin interfaceVarHandler- Type Parameters:
N- the incoming stack- Parameters:
em- the emitter typed with the incoming stackgen- the code generatoropnd- the operand whose locals contain the value to be storedext- the kind of extension to applyscope- a scope for generating temporary local storage- Returns:
- the emitter typed with the incoming stack
-
genStoreFromArray
public <N1 extends Emitter.Next,N0 extends Emitter.Ent<N1, Emitter<N1> genStoreFromArrayTypes.TRef<int[]>>> (Emitter<N0> em, JitCodeGenerator<?> gen, JitType.MpIntJitType type, Opnd.Ext ext, Scope scope) Description copied from interface:VarHandlerEmit bytecode to store a varnode's value from an array of integer legs, in little endian order- Specified by:
genStoreFromArrayin interfaceVarHandler- Type Parameters:
N1- the tail of the incoming stackN0- the incoming stack having the array ref on top- Parameters:
em- the emitter typed with the incoming stackgen- the code generatortype- the p-code type of the value on the stackext- the kind of extension to applyscope- a scope for generating temporary local storage- Returns:
- the emitter typed with the resulting stack, i.e., having popped the array
-
subpiece
Description copied from interface:VarHandlerCreate a handler for aPcodeOp.SUBPIECEof a value.To implement
subpiece, we could load the entire varnode and then extract the designated portion. Or, we could load only the designated portion, averting any code and execution cost of loading the un-designated portions. We accomplish this by re-writing the subpiece op and a load of the sub-varnode.- Specified by:
subpiecein interfaceVarHandler- Parameters:
endian- the endianness of the emulation targetbyteOffset- the number of least-significant bytes to removemaxByteSize- the maximum size of the resulting variable. In general, a subpiece should never exceed the size of the parent varnode, but if it does, this will truncate that excess.- Returns:
- the resulting subpiece handler
-