Package ghidra.app.plugin.assembler.sleigh.expr

# Class ContextFieldSolver

java.lang.Object
ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver<ContextField>
ghidra.app.plugin.assembler.sleigh.expr.ContextFieldSolver

public class ContextFieldSolver extends AbstractExpressionSolver<ContextField>
Solves expressions of a context register field

Essentially, this just encodes the goal into the field, if it can be represented in the given space and format. Otherwise, there is no solution.

- ## Field Summary

  ### Fields inherited from class ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver

  `solver`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ContextFieldSolver()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `int`
  `getInstructionLength(ContextField cf)`
  Determines the length of the subconstructor that would be returned had the expression not depended on an undefined symbol.
  `MaskedLong`
  `getValue(ContextField cf, Map<String,Long> vals, AssemblyResolvedPatterns cur)`
  Attempt to get a constant value for the expression
  `AssemblyResolution`
  `solve(AbstractAssemblyResolutionFactory<?,?> factory, ContextField cf, MaskedLong goal, Map<String,Long> vals, AssemblyResolvedPatterns cur, Set<SolverHint> hints, String description)`
  Attempt to solve an expression for a given value
  `MaskedLong`
  `valueForResolution(ContextField cf, Map<String,Long> vals, AssemblyResolvedPatterns rc)`
  Compute the value of the expression given the (possibly-intermediate) resolution

  ### Methods inherited from class ghidra.app.plugin.assembler.sleigh.expr.AbstractExpressionSolver

  `register`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ContextFieldSolver

    public ContextFieldSolver()

- ## Method Details

  - ### solve

    public AssemblyResolution solve(AbstractAssemblyResolutionFactory<?,?> factory, ContextField cf, MaskedLong goal, Map<String,Long> vals, AssemblyResolvedPatterns cur, Set<SolverHint> hints, String description)
    Description copied from class: `AbstractExpressionSolver`
    Attempt to solve an expression for a given value
    Specified by:
      `solve` in class `AbstractExpressionSolver<ContextField>`
    Parameters:
      `cf` - the expression to solve
      `goal` - the desired value of the expression
      `vals` - values of defined symbols
      `hints` - describes techniques applied by calling solvers
      `description` - the description to give to resolved solutions
    Returns:
      the resolution

  - ### getValue

    public MaskedLong getValue(ContextField cf, Map<String,Long> vals, AssemblyResolvedPatterns cur)
    Description copied from class: `AbstractExpressionSolver`
    Attempt to get a constant value for the expression
    Specified by:
      `getValue` in class `AbstractExpressionSolver<ContextField>`
    Parameters:
      `cf` - the expression
      `vals` - values of defined symbols
    Returns:
      the constant value, or null if it depends on a variable

  - ### getInstructionLength

    public int getInstructionLength(ContextField cf)
    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 class `AbstractExpressionSolver<ContextField>`
    Parameters:
      `cf` - the expression
    Returns:
      the length of filled in token field(s).

  - ### valueForResolution

    public MaskedLong valueForResolution(ContextField cf, Map<String,Long> vals, AssemblyResolvedPatterns rc)
    Description copied from class: `AbstractExpressionSolver`
    Compute the value of the expression given the (possibly-intermediate) resolution
    Specified by:
      `valueForResolution` in class `AbstractExpressionSolver<ContextField>`
    Parameters:
      `cf` - the expression to evaluate
      `vals` - values of defined symbols
      `rc` - the resolution on which to evaluate it
    Returns:
      the result