Class AbstractUnaryExpressionSolver<T extends UnaryExpression>
- java.lang.Object
-
- ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver<T>
-
- ghidra.app.plugin.assembler.sleigh.expr.AbstractUnaryExpressionSolver<T>
-
- Type Parameters:
T
- the type of expression solved (the operator)
- Direct Known Subclasses:
MinusExpressionSolver
,NotExpressionSolver
public abstract class AbstractUnaryExpressionSolver<T extends UnaryExpression> extends AbstractExpressionSolver<T>
A solver that handles expressions of the form [OP]A
-
-
Field Summary
-
Fields inherited from class ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver
dbg, solver
-
-
Constructor Summary
Constructors Constructor Description AbstractUnaryExpressionSolver(java.lang.Class<T> tcls)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract MaskedLong
compute(MaskedLong val)
Compute the result of applying the operator to the given valueMaskedLong
computeInverse(MaskedLong goal)
Compute the input value given that the result is known NOTE: Assumes an involution by defaultint
getInstructionLength(T exp, java.util.Map<java.lang.Integer,java.lang.Object> res)
Determines the length of the subconstructor that would be returned had the expression not depended on an undefined symbol.MaskedLong
getValue(T exp, java.util.Map<java.lang.String,java.lang.Long> vals, java.util.Map<java.lang.Integer,java.lang.Object> res, AssemblyResolvedConstructor cur)
Attempt to get a constant value for the expressionAssemblyResolution
solve(T exp, MaskedLong goal, java.util.Map<java.lang.String,java.lang.Long> vals, java.util.Map<java.lang.Integer,java.lang.Object> res, AssemblyResolvedConstructor cur, java.util.Set<SolverHint> hints, java.lang.String description)
Attempt to solve an expression for a given valueMaskedLong
valueForResolution(T exp, AssemblyResolvedConstructor rc)
Compute the value of the expression given the (possibly-intermediate) resolution-
Methods inherited from class ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver
register
-
-
-
-
Constructor Detail
-
AbstractUnaryExpressionSolver
public AbstractUnaryExpressionSolver(java.lang.Class<T> tcls)
-
-
Method Detail
-
solve
public AssemblyResolution solve(T exp, MaskedLong goal, java.util.Map<java.lang.String,java.lang.Long> vals, java.util.Map<java.lang.Integer,java.lang.Object> res, AssemblyResolvedConstructor cur, java.util.Set<SolverHint> hints, java.lang.String description) throws NeedsBackfillException
Description copied from class:AbstractExpressionSolver
Attempt to solve an expression for a given value- Specified by:
solve
in classAbstractExpressionSolver<T extends UnaryExpression>
- Parameters:
exp
- the expression to solvegoal
- the desired value of the expressionvals
- values of defined symbolsres
- the results of subconstructor resolutions (used for lengths)hints
- describes techniques applied by calling solversdescription
- the description to give to resolved solutions- Returns:
- the resolution
- Throws:
NeedsBackfillException
- if the expression refers to an undefined symbol
-
getValue
public MaskedLong getValue(T exp, java.util.Map<java.lang.String,java.lang.Long> vals, java.util.Map<java.lang.Integer,java.lang.Object> res, AssemblyResolvedConstructor cur) throws NeedsBackfillException
Description copied from class:AbstractExpressionSolver
Attempt to get a constant value for the expression- Specified by:
getValue
in classAbstractExpressionSolver<T extends UnaryExpression>
- Parameters:
exp
- the expressionvals
- values of defined symbolsres
- the results of subconstructor resolutions (used for lengths)- Returns:
- the constant value, or null if it depends on a variable
- Throws:
NeedsBackfillException
- if the expression refers to an undefined symbol
-
computeInverse
public MaskedLong computeInverse(MaskedLong goal)
Compute the input value given that the result is known NOTE: Assumes an involution by default- Parameters:
goal
- the result- Returns:
- the input value solution
-
compute
public abstract MaskedLong compute(MaskedLong val)
Compute the result of applying the operator to the given value- Parameters:
val
- the input value- Returns:
- the result
-
getInstructionLength
public int getInstructionLength(T exp, java.util.Map<java.lang.Integer,java.lang.Object> res)
Description copied from class:AbstractExpressionSolver
Determines the length of the subconstructor that would be returned had the expression not depended on an undefined symbol. This is used by the backfilling process to ensure values are written to the correct offset- Specified by:
getInstructionLength
in classAbstractExpressionSolver<T extends UnaryExpression>
- Parameters:
exp
- the expressionres
- the results of subconstructor resolutions (used for lengths)- Returns:
- the length of filled in token field(s).
-
valueForResolution
public MaskedLong valueForResolution(T exp, AssemblyResolvedConstructor rc)
Description copied from class:AbstractExpressionSolver
Compute the value of the expression given the (possibly-intermediate) resolution- Specified by:
valueForResolution
in classAbstractExpressionSolver<T extends UnaryExpression>
- Parameters:
exp
- the expression to evaluaterc
- the resolution on which to evaluate it- Returns:
- the result
-
-