mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 10:49:34 +02:00
Merge remote-tracking branch 'origin/GP-2568_PtrsubZeroResolve'
(Closes #4508)
This commit is contained in:
commit
947de197d2
5 changed files with 26 additions and 38 deletions
|
@ -6150,7 +6150,8 @@ void AddTreeState::buildTree(void)
|
|||
// Create PTRADD portion of operation
|
||||
if (multNode != (Varnode *)0) {
|
||||
newop = data.newOpBefore(baseOp,CPUI_PTRADD,ptr,multNode,data.newConstant(ptrsize,size));
|
||||
data.inheritReadResolution(newop, 0, baseOp, baseSlot);
|
||||
if (ptr->getType()->needsResolution())
|
||||
data.inheritResolution(ptr->getType(),newop, 0, baseOp, baseSlot);
|
||||
multNode = newop->getOut();
|
||||
}
|
||||
else
|
||||
|
@ -6159,7 +6160,8 @@ void AddTreeState::buildTree(void)
|
|||
// Create PTRSUB portion of operation
|
||||
if (isSubtype) {
|
||||
newop = data.newOpBefore(baseOp,CPUI_PTRSUB,multNode,data.newConstant(ptrsize,offset));
|
||||
data.inheritReadResolution(newop, 0, baseOp, baseSlot);
|
||||
if (multNode->getType()->needsResolution())
|
||||
data.inheritResolution(multNode->getType(),newop, 0, baseOp, baseSlot);
|
||||
if (size != 0)
|
||||
newop->setStopTypePropagation();
|
||||
multNode = newop->getOut();
|
||||
|
@ -6334,7 +6336,8 @@ int4 RuleStructOffset0::applyOp(PcodeOp *op,Funcdata &data)
|
|||
else
|
||||
return 0;
|
||||
|
||||
Datatype *ct = op->getIn(1)->getTypeReadFacing(op);
|
||||
Varnode *ptrVn = op->getIn(1);
|
||||
Datatype *ct = ptrVn->getTypeReadFacing(op);
|
||||
if (ct->getMetatype() != TYPE_PTR) return 0;
|
||||
Datatype *baseType = ((TypePointer *)ct)->getPtrTo();
|
||||
uintb offset = 0;
|
||||
|
@ -6372,8 +6375,9 @@ int4 RuleStructOffset0::applyOp(PcodeOp *op,Funcdata &data)
|
|||
else
|
||||
return 0;
|
||||
|
||||
PcodeOp *newop = data.newOpBefore(op,CPUI_PTRSUB,op->getIn(1),data.newConstant(op->getIn(1)->getSize(),0));
|
||||
data.inheritReadResolution(newop, 0, op, 1);
|
||||
PcodeOp *newop = data.newOpBefore(op,CPUI_PTRSUB,ptrVn,data.newConstant(ptrVn->getSize(),0));
|
||||
if (ptrVn->getType()->needsResolution())
|
||||
data.inheritResolution(ptrVn->getType(),newop, 0, op, 1);
|
||||
newop->setStopTypePropagation();
|
||||
data.opSetInput(op,newop->getOut(),1);
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue