My Project
|
A description of the topological scope of a single variable object. More...
#include <cover.hh>
Public Member Functions | |
void | clear (void) |
Clear this to an empty Cover. | |
int4 | compareTo (const Cover &op2) const |
Give ordering of this and another Cover. More... | |
const CoverBlock & | getCoverBlock (int4 i) const |
Get the CoverBlock corresponding to the i-th block. More... | |
int4 | intersect (const Cover &op2) const |
Characterize the intersection between this and another Cover. More... | |
int4 | intersectByBlock (int4 blk, const Cover &op2) const |
Characterize the intersection on a specific block. More... | |
void | intersectList (vector< int4 > &listout, const Cover &op2, int4 level) const |
Generate a list of blocks that intersect. More... | |
bool | contain (const PcodeOp *op, int4 max) const |
Does this contain the given PcodeOp. More... | |
int4 | containVarnodeDef (const Varnode *vn) const |
Check the definition of a Varnode for containment. More... | |
void | merge (const Cover &op2) |
Merge this with another Cover block by block. More... | |
void | rebuild (const Varnode *vn) |
Reset this based on def-use of a single Varnode. More... | |
void | addDefPoint (const Varnode *vn) |
Reset to the single point where the given Varnode is defined. More... | |
void | addRefPoint (const PcodeOp *ref, const Varnode *vn) |
Add a variable read to this Cover. More... | |
void | print (ostream &s) const |
Dump a description of this cover to stream. More... | |
map< int4, CoverBlock >::const_iterator | begin (void) const |
Get beginning of CoverBlocks. | |
map< int4, CoverBlock >::const_iterator | end (void) const |
Get end of CoverBlocks. | |
A description of the topological scope of a single variable object.
The topological scope of a variable within a function is the set of locations within the code of the function where that variable holds a variable. For the decompiler, a high-level variable in this sense, HighVariable, is a collection of Varnode objects. In order to merge Varnodes into a HighVariable, the topological scope of each Varnode must not intersect because that would mean the high-level variable holds different values at the same point in the function.
Internally this is implemented as a map from basic block to their non-empty CoverBlock
void Cover::addDefPoint | ( | const Varnode * | vn | ) |
int4 Cover::compareTo | ( | const Cover & | op2 | ) | const |
Give ordering of this and another Cover.
Compare this with another Cover by comparing just the indices of the first blocks respectively that are partly covered. Return -1, 0, or 1 if this Cover's first block has a smaller, equal, or bigger index than the other Cover's first block.
op2 | is the other Cover |
bool Cover::contain | ( | const PcodeOp * | op, |
int4 | max | ||
) | const |
int4 Cover::containVarnodeDef | ( | const Varnode * | vn | ) | const |
Check the definition of a Varnode for containment.
If the given Varnode has a defining PcodeOp this is checked for containment. If the Varnode is an input, check if this covers the start of the function.
Return:
vn | is the given Varnode |
const CoverBlock & Cover::getCoverBlock | ( | int4 | i | ) | const |
Get the CoverBlock corresponding to the i-th block.
Return a representative CoverBlock describing how much of the given block is covered by this
i | is the index of the given block |
int4 Cover::intersect | ( | const Cover & | op2 | ) | const |
int4 Cover::intersectByBlock | ( | int4 | blk, |
const Cover & | op2 | ||
) | const |
Characterize the intersection on a specific block.
Looking only at the given block, Return
blk | is the index of the given block |
op2 | is the other Cover |
void Cover::intersectList | ( | vector< int4 > & | listout, |
const Cover & | op2, | ||
int4 | level | ||
) | const |
Generate a list of blocks that intersect.
For each block for which this and another Cover intersect, and the block's index to a result list if the type of intersection exceeds a characterization level.
listout | will hold the list of intersecting block indices |
op2 | is the other Cover |
level | is the characterization threshold which must be exceeded |
void Cover::merge | ( | const Cover & | op2 | ) |
void Cover::print | ( | ostream & | s | ) | const |
Dump a description of this cover to stream.
s | is the output stream |
void Cover::rebuild | ( | const Varnode * | vn | ) |