|
My Project
|
Class for splitting up Varnodes that hold 2 logical variables. More...
#include <subflow.hh>


Public Member Functions | |
| SplitFlow (Funcdata *f, Varnode *root, int4 lowSize) | |
| Constructor. | |
| bool | doTrace (void) |
| Trace split through data-flow, constructing transform. More... | |
Public Member Functions inherited from TransformManager | |
| TransformManager (Funcdata *f) | |
| Constructor. | |
| virtual | ~TransformManager (void) |
| Destructor. | |
| virtual bool | preserveAddress (Varnode *vn, int4 bitSize, int4 lsbOffset) const |
| Should the address of the given Varnode be preserved when constructing a piece. More... | |
| Funcdata * | getFunction (void) const |
| Get function being transformed. | |
| void | clearVarnodeMarks (void) |
| Clear mark for all Varnodes in the map. | |
| TransformVar * | newPreexistingVarnode (Varnode *vn) |
| Make placeholder for preexisting Varnode. More... | |
| TransformVar * | newUnique (int4 size) |
| Make placeholder for new unique space Varnode. More... | |
| TransformVar * | newConstant (int4 size, int4 lsbOffset, uintb val) |
| Make placeholder for constant Varnode. More... | |
| TransformVar * | newIop (Varnode *vn) |
| Make placeholder for special iop constant. More... | |
| TransformVar * | newPiece (Varnode *vn, int4 bitSize, int4 lsbOffset) |
| Make placeholder for piece of a Varnode. More... | |
| TransformVar * | newSplit (Varnode *vn, const LaneDescription &description) |
| Create placeholder nodes splitting a Varnode into its lanes. More... | |
| TransformVar * | newSplit (Varnode *vn, const LaneDescription &description, int4 numLanes, int4 startLane) |
| Create placeholder nodes splitting a Varnode into a subset of lanes in the given description. More... | |
| TransformOp * | newOpReplace (int4 numParams, OpCode opc, PcodeOp *replace) |
| Create a new placeholder op intended to replace an existing op. More... | |
| TransformOp * | newOp (int4 numParams, OpCode opc, TransformOp *follow) |
| Create a new placeholder op that will not replace an existing op. More... | |
| TransformOp * | newPreexistingOp (int4 numParams, OpCode opc, PcodeOp *originalOp) |
| Create a new placeholder op for an existing PcodeOp. More... | |
| TransformVar * | getPreexistingVarnode (Varnode *vn) |
| Get (or create) placeholder for preexisting Varnode. More... | |
| TransformVar * | getPiece (Varnode *vn, int4 bitSize, int4 lsbOffset) |
| Get (or create) placeholder piece. More... | |
| TransformVar * | getSplit (Varnode *vn, const LaneDescription &description) |
| Find (or create) placeholder nodes splitting a Varnode into its lanes. More... | |
| TransformVar * | getSplit (Varnode *vn, const LaneDescription &description, int4 numLanes, int4 startLane) |
| Find (or create) placeholder nodes splitting a Varnode into a subset of lanes from a description. More... | |
| void | opSetInput (TransformOp *rop, TransformVar *rvn, int4 slot) |
| Mark given variable as input to given op. More... | |
| void | opSetOutput (TransformOp *rop, TransformVar *rvn) |
| Mark given variable as output of given op. More... | |
| void | apply (void) |
| Apply the full transform to the function. | |
Additional Inherited Members | |
Static Public Member Functions inherited from TransformManager | |
| static bool | preexistingGuard (int4 slot, TransformVar *rvn) |
| Should newPreexistingOp be called. More... | |
Class for splitting up Varnodes that hold 2 logical variables.
Starting from a root Varnode provided to the constructor, this class looks for data-flow that consistently holds 2 logical values in a single Varnode. If doTrace() returns true, a consistent view has been created and invoking apply() will split all Varnodes and PcodeOps involved in the data-flow into their logical pieces.
| bool SplitFlow::doTrace | ( | void | ) |
Trace split through data-flow, constructing transform.
Push the logical split around, setting up the explicit transforms as we go. If at any point, the split cannot be naturally pushed, return false.
1.8.13