Package ghidra.pcode.exec
Class SleighPcodeUseropDefinition<T>
java.lang.Object
ghidra.pcode.exec.SleighPcodeUseropDefinition<T>
- Type Parameters:
T
- no type in particular, except to match any executor
- All Implemented Interfaces:
PcodeUseropLibrary.PcodeUseropDefinition<T>
public class SleighPcodeUseropDefinition<T>
extends Object
implements PcodeUseropLibrary.PcodeUseropDefinition<T>
A p-code userop defined using Sleigh source
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
A builder for a particular useropstatic class
A factory for buildingSleighPcodeUseropDefinition
s. -
Field Summary
-
Constructor Summary
ModifierConstructorDescriptionprotected
SleighPcodeUseropDefinition
(SleighLanguage language, String name, List<String> params, String body) -
Method Summary
Modifier and TypeMethodDescriptionvoid
execute
(PcodeExecutor<T> executor, PcodeUseropLibrary<T> library, Varnode outArg, List<Varnode> inArgs) Invoke/execute the userop.getBody()
Get the Sleigh source that defines this useropint
Get the number of input operands acccepted by the userop.Get the names of the inputs in ordergetName()
Get the name of the userop.programFor
(Varnode outArg, List<Varnode> inArgs, PcodeUseropLibrary<?> library) Get the p-code program implementing this userop for the given arguments and library.
-
Field Details
-
OUT_SYMBOL_NAME
- See Also:
-
-
Constructor Details
-
SleighPcodeUseropDefinition
protected SleighPcodeUseropDefinition(SleighLanguage language, String name, List<String> params, String body)
-
-
Method Details
-
programFor
Get the p-code program implementing this userop for the given arguments and library.This will compile and cache a program for each new combination of arguments seen.
- Parameters:
outArg
- the output operand, if applicableinArgs
- the input operandslibrary
- the complete userop library- Returns:
- the p-code program to be fed to the same executor as invoked this userop, but in a new frame
-
getName
Description copied from interface:PcodeUseropLibrary.PcodeUseropDefinition
Get the name of the userop.This is the symbol assigned to the userop when compiling new Sleigh code. It cannot conflict with existing userops (except those declared, but not defined, by the executor's language) or other symbols of the executor's language. If this userop is to be used generically across many languages, choose an unlikely name. Conventionally, these start with two underscores
__
.- Specified by:
getName
in interfacePcodeUseropLibrary.PcodeUseropDefinition<T>
- Returns:
- the name of the userop
-
getInputCount
public int getInputCount()Description copied from interface:PcodeUseropLibrary.PcodeUseropDefinition
Get the number of input operands acccepted by the userop.- Specified by:
getInputCount
in interfacePcodeUseropLibrary.PcodeUseropDefinition<T>
- Returns:
- the count or -1 if the userop is variadic
-
execute
public void execute(PcodeExecutor<T> executor, PcodeUseropLibrary<T> library, Varnode outArg, List<Varnode> inArgs) Description copied from interface:PcodeUseropLibrary.PcodeUseropDefinition
Invoke/execute the userop.- Specified by:
execute
in interfacePcodeUseropLibrary.PcodeUseropDefinition<T>
- Parameters:
executor
- the executor invoking this userop.library
- the complete library for this execution. Note the library may have been composed from more than the one defining this userop.outArg
- if invoked as an rval, the destination varnode for the userop's output. Otherwise,null
.inArgs
- the input varnodes as ordered in the source.- See Also:
-
getInputs
Get the names of the inputs in order- Returns:
- the input names
-
getBody
Get the Sleigh source that defines this userop- Returns:
- the lines
-