decompiler
1.0.0
|
Class for freezing value sets at a specific iteration (to accelerate convergence) More...
#include <rangeutil.hh>
Public Member Functions | |
virtual int4 | determineIterationReset (const ValueSet &valueSet) |
Upon entering a fresh partition, determine how the given ValueSet count should be reset. More... | |
virtual bool | checkFreeze (const ValueSet &valueSet) |
Check if the given value set has been frozen for the remainder of the iteration process. More... | |
virtual bool | doWidening (const ValueSet &valueSet, CircleRange &range, const CircleRange &newRange) |
For an iteration that isn't stabilizing attempt to widen the given ValueSet. More... | |
Public Member Functions inherited from Widener | |
virtual | ~Widener (void) |
Destructor. | |
Private Attributes | |
int4 | freezeIteration |
The iteration at which all change ceases. | |
Class for freezing value sets at a specific iteration (to accelerate convergence)
The value sets don't reach a true stable state but instead lock in a description of the first few values that reach a given Varnode. The ValueSetSolver does normal iteration, but individual ValueSets freeze after a specific number of iterations (3 by default), instead of growing to a true stable state. This gives evidence of iteration in the underlying code, showing the initial value and frequently the step size.
|
virtual |
Check if the given value set has been frozen for the remainder of the iteration process.
valueSet | is the given value set |
Implements Widener.
References ValueSet::getCount(), ValueSet::getRange(), and CircleRange::isFull().
|
virtual |
Upon entering a fresh partition, determine how the given ValueSet count should be reset.
valueSet | is the given value set |
Implements Widener.
References ValueSet::getCount().
|
virtual |
For an iteration that isn't stabilizing attempt to widen the given ValueSet.
Change the given range based on its previous iteration so that it stabilizes more rapidly on future iterations.
valueSet | is the given value set |
range | is the previous form of the given range (and storage for the widening result) |
newRange | is the current iteration of the given range |
Implements Widener.