Ghidra Decompiler Analysis Engine
|
A (putative) switch variable Varnode and a constraint imposed by a CBRANCH. More...
#include <jumptable.hh>
Public Member Functions | |
GuardRecord (PcodeOp *bOp, PcodeOp *rOp, int4 path, const CircleRange &rng, Varnode *v) | |
Constructor. More... | |
int4 | valueMatch (Varnode *vn2, Varnode *baseVn2, int4 bitsPreserved2) const |
Determine if this guard applies to the given Varnode. More... | |
Static Public Member Functions | |
static int4 | oneOffMatch (PcodeOp *op1, PcodeOp *op2) |
Return 1 if the two given PcodeOps produce exactly the same value, 0 if otherwise. More... | |
static Varnode * | quasiCopy (Varnode *vn, int4 &bitsPreserved) |
Compute the source of a quasi-COPY chain for the given Varnode. More... | |
A (putative) switch variable Varnode and a constraint imposed by a CBRANCH.
The record constrains a specific Varnode. If the associated CBRANCH is followed along the path that reaches the switch's BRANCHIND, then we have an explicit description of the possible values the Varnode can hold.
GuardRecord::GuardRecord | ( | PcodeOp * | bOp, |
PcodeOp * | rOp, | ||
int4 | path, | ||
const CircleRange & | rng, | ||
Varnode * | v | ||
) |
Return 1 if the two given PcodeOps produce exactly the same value, 0 if otherwise.
We up through only one level of PcodeOp calculation and only for certain binary ops where the second parameter is a constant.
Compute the source of a quasi-COPY chain for the given Varnode.
A value is a quasi-copy if a sequence of PcodeOps producing it always hold the value as the least significant bits of their output Varnode, but the sequence may put other non-zero values in the upper bits. This method computes the earliest ancestor Varnode for which the given Varnode can be viewed as a quasi-copy.
vn | is the given Varnode |
bitsPreserved | will hold the number of least significant bits preserved by the sequence |
Determine if this guard applies to the given Varnode.
The guard applies if we know the given Varnode holds the same value as the Varnode attached to the guard. So we return:
vn2 | is the given Varnode being tested against this guard |
baseVn2 | is the earliest Varnode from which the given Varnode is quasi-copied. |
bitsPreserved2 | is the number of potentially non-zero bits in the given Varnode |