Class DefaultAssemblyResolvedBackfill
- All Implemented Interfaces:
AssemblyResolution
,AssemblyResolvedBackfill
,Comparable<AssemblyResolution>
AssemblyResolution
indicating the need to solve an expression in the future
Such records are collected within a AssemblyResolvedPatterns
and then solved just before
the final result(s) are assembled. This is typically required by instructions that refer to the
inst_next
symbol.
NOTE: These are used internally. The user ought never to see these from the assembly API.
-
Field Summary
Modifier and TypeFieldDescriptionprotected final PatternExpression
protected final MaskedLong
protected final int
protected final int
Fields inherited from class ghidra.app.plugin.assembler.sleigh.sem.AbstractAssemblyResolution
children, description, factory, right
-
Constructor Summary
ModifierConstructorDescriptionprotected
DefaultAssemblyResolvedBackfill
(AbstractAssemblyResolutionFactory<?, ?> factory, String description, PatternExpression exp, MaskedLong goal, int inslen, int offset) -
Method Summary
Modifier and TypeMethodDescriptionprotected int
protected AssemblyResolvedBackfill
copy()
Duplicate this recordint
Get the expected length of the instruction portion of the future encoding This is used to make sure that operands following a to-be-determined encoding are placed properly.boolean
Check if this record describes a backfillboolean
isError()
Check if this record describes an errorDisplay the resolution result in one line (omitting child details)Get this same resolution, pushing its right siblings down to its childrenshift
(int amt) Shift the resolution's instruction pattern to the right, if applicableshiftBuilder
(int amt) solve
(RecursiveDescentSolver solver, Map<String, Long> vals, AssemblyResolvedPatterns cur) Attempt (again) to solve the expression that generated this backfill recordwithRight
(AssemblyResolution right) Get this same resolution, but with the given right siblingMethods inherited from class ghidra.app.plugin.assembler.sleigh.sem.AbstractAssemblyResolution
childrenToString, collectAllRight, compareTo, getAllRight, getChildren, getDescription, getRight, hasChildren, hashCode, toString, toString, withoutRight
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ghidra.app.plugin.assembler.sleigh.sem.AssemblyResolution
collectAllRight, getChildren, getDescription, getRight, hasChildren, toString, toString
Methods inherited from interface java.lang.Comparable
compareTo
-
Field Details
-
exp
-
goal
-
inslen
protected final int inslen -
offset
protected final int offset
-
-
Constructor Details
-
DefaultAssemblyResolvedBackfill
protected DefaultAssemblyResolvedBackfill(AbstractAssemblyResolutionFactory<?, ?> factory, String description, PatternExpression exp, MaskedLong goal, int inslen, int offset)
-
-
Method Details
-
computeHash
protected int computeHash()- Specified by:
computeHash
in classAbstractAssemblyResolution
-
copyBuilder
protected AbstractAssemblyResolutionFactory.AbstractAssemblyResolvedBackfillBuilder<?> copyBuilder() -
copy
Duplicate this record- Returns:
- the duplicate
-
withRight
Description copied from class:AbstractAssemblyResolution
Get this same resolution, but with the given right sibling- Specified by:
withRight
in classAbstractAssemblyResolution
- Parameters:
right
- the right sibling- Returns:
- the resolution
-
getInstructionLength
public int getInstructionLength()Description copied from interface:AssemblyResolvedBackfill
Get the expected length of the instruction portion of the future encoding This is used to make sure that operands following a to-be-determined encoding are placed properly. Even though the actual encoding cannot yet be determined, its length can.- Specified by:
getInstructionLength
in interfaceAssemblyResolvedBackfill
- Returns:
- the total expected length (including the offset)
-
isError
public boolean isError()Description copied from interface:AssemblyResolution
Check if this record describes an error- Specified by:
isError
in interfaceAssemblyResolution
- Returns:
- true if the record is an error
-
isBackfill
public boolean isBackfill()Description copied from interface:AssemblyResolution
Check if this record describes a backfill- Specified by:
isBackfill
in interfaceAssemblyResolution
- Returns:
- true if the record is a backfill
-
lineToString
Description copied from interface:AssemblyResolution
Display the resolution result in one line (omitting child details)- Specified by:
lineToString
in interfaceAssemblyResolution
- Returns:
- the display description
-
shiftBuilder
protected AbstractAssemblyResolutionFactory.AbstractAssemblyResolvedBackfillBuilder<?> shiftBuilder(int amt) -
shift
Description copied from interface:AssemblyResolution
Shift the resolution's instruction pattern to the right, if applicableThis also shifts any backfill and forbidden pattern records.
- Specified by:
shift
in interfaceAssemblyResolution
- Specified by:
shift
in interfaceAssemblyResolvedBackfill
- Specified by:
shift
in classAbstractAssemblyResolution
- Parameters:
amt
- the number of bytes to shift.- Returns:
- the result
-
parent
Description copied from interface:AssemblyResolution
Get this same resolution, pushing its right siblings down to its children- Specified by:
parent
in interfaceAssemblyResolution
-
solve
public AssemblyResolution solve(RecursiveDescentSolver solver, Map<String, Long> vals, AssemblyResolvedPatterns cur) Description copied from interface:AssemblyResolvedBackfill
Attempt (again) to solve the expression that generated this backfill recordThis will attempt to solve the same expression and goal again, using the same parameters as were given to the original attempt, except with additional defined symbols. Typically, the symbol that required backfill is
inst_next
. This method will not throwNeedsBackfillException
, since that would imply the missing symbol(s) from the original attempt are still missing. Instead, the method returns an instance ofAssemblyResolvedError
.- Specified by:
solve
in interfaceAssemblyResolvedBackfill
- Parameters:
solver
- a solver, usually the same as the one from the original attempt.vals
- the defined symbols, usually the same, but with the missing symbol(s).- Returns:
- the solution result
-