本文整理汇总了C++中expression::Ptr::getChildren方法的典型用法代码示例。如果您正苦于以下问题:C++ Ptr::getChildren方法的具体用法?C++ Ptr::getChildren怎么用?C++ Ptr::getChildren使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类expression::Ptr
的用法示例。
在下文中一共展示了Ptr::getChildren方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: z
void IA_x86Details::computeTableAddress()
{
// Extract displacement from table insn
Expression::Ptr displacementSrc;
if(tableInsn.insn->getCategory() == c_BranchInsn)
{
Expression::Ptr op = tableInsn.insn->getOperand(0).getValue();
std::vector<Expression::Ptr> tmp;
op->getChildren(tmp);
if(tmp.empty())
{
displacementSrc = op;
}
else
{
displacementSrc = tmp[0];
}
}
else
{
parsing_printf("\tcracking table instruction %s\n", tableInsn.insn->format().c_str());
std::vector<Expression::Ptr> tmp;
Expression::Ptr op = tableInsn.insn->getOperand(1).getValue();
if(!op)
{
parsing_printf("\ttable insn BAD! (no second operand)\n");
return;
}
if(tableInsn.insn->getOperation().getID() != e_lea)
{
op->getChildren(tmp);
if(tmp.empty())
{
parsing_printf("\ttable insn BAD! (not LEA, second operand not a deref)\n");
return;
}
displacementSrc = tmp[0];
}
else
{
displacementSrc = op;
}
}
zeroAllGPRegisters z(tableInsn.addrOfInsn + tableInsn.insn->size());
displacementSrc->apply(&z);
if(!z.isDefined())
{
parsing_printf("\ttable insn: %s, displacement %s, bind of all GPRs FAILED\n",
tableInsn.insn->format().c_str(), displacementSrc->format().c_str());
return;
}
else
{
tableInsn.addrFromInsn = z.getResult();
}
parsing_printf("\ttableInsn.addrFromInsn set to 0x%lx\n",tableInsn.addrFromInsn);
}