当前位置: 首页>>代码示例>>C++>>正文


C++ SymbolRef::symbol_begin方法代码示例

本文整理汇总了C++中SymbolRef::symbol_begin方法的典型用法代码示例。如果您正苦于以下问题:C++ SymbolRef::symbol_begin方法的具体用法?C++ SymbolRef::symbol_begin怎么用?C++ SymbolRef::symbol_begin使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在SymbolRef的用法示例。


在下文中一共展示了SymbolRef::symbol_begin方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: isTainted

bool ProgramState::isTainted(SymbolRef Sym, TaintTagType Kind) const {
    if (!Sym)
        return false;

    // Traverse all the symbols this symbol depends on to see if any are tainted.
    bool Tainted = false;
    for (SymExpr::symbol_iterator SI = Sym->symbol_begin(), SE =Sym->symbol_end();
            SI != SE; ++SI) {
        if (!isa<SymbolData>(*SI))
            continue;

        const TaintTagType *Tag = get<TaintMap>(*SI);
        Tainted = (Tag && *Tag == Kind);

        // If this is a SymbolDerived with a tainted parent, it's also tainted.
        if (const SymbolDerived *SD = dyn_cast<SymbolDerived>(*SI))
            Tainted = Tainted || isTainted(SD->getParentSymbol(), Kind);

        // If memory region is tainted, data is also tainted.
        if (const SymbolRegionValue *SRV = dyn_cast<SymbolRegionValue>(*SI))
            Tainted = Tainted || isTainted(SRV->getRegion(), Kind);

        // If If this is a SymbolCast from a tainted value, it's also tainted.
        if (const SymbolCast *SC = dyn_cast<SymbolCast>(*SI))
            Tainted = Tainted || isTainted(SC->getOperand(), Kind);

        if (Tainted)
            return true;
    }

    return Tainted;
}
开发者ID:tomtor,项目名称:freebsd,代码行数:32,代码来源:ProgramState.cpp

示例2: ifTainted

bool DoubleFetchChecker::ifTainted(ProgramStateRef state, SymbolRef Sym) const {
   if (!Sym)
     return false;

   // Traverse all the symbols this symbol depends on to see if any are tainted.
   bool Tainted = false;
   for (SymExpr::symbol_iterator SI = Sym->symbol_begin(), SE =Sym->symbol_end();
        SI != SE; ++SI) {
     if (!isa<SymbolData>(*SI))
       continue;

     const TaintList *TL = state->get<TaintsMap>(*SI);
     Tainted = (TL && !TL->isEmpty());

     // If this is a SymbolDerived with a tainted parent, it's also tainted.
     if (const SymbolDerived *SD = dyn_cast<SymbolDerived>(*SI))
       Tainted = Tainted || ifTainted(state, SD->getParentSymbol());

     // If memory region is tainted, data is also tainted.
     if (const SymbolRegionValue *SRV = dyn_cast<SymbolRegionValue>(*SI))
       Tainted = Tainted || ifTainted(state, SRV->getRegion());

     // If this is a SymbolCast from a tainted value, it's also tainted.
     if (const SymbolCast *SC = dyn_cast<SymbolCast>(*SI))
       Tainted = Tainted || ifTainted(state, SC->getOperand());

     if (Tainted)
       return true;
   }

   return Tainted;
}
开发者ID:wpengfei,项目名称:DFTracker,代码行数:32,代码来源:DoubleFetchChecker-beforeXmas.cpp

示例3: isTainted

bool taint::isTainted(ProgramStateRef State, SymbolRef Sym, TaintTagType Kind) {
  if (!Sym)
    return false;

  // Traverse all the symbols this symbol depends on to see if any are tainted.
  for (SymExpr::symbol_iterator SI = Sym->symbol_begin(),
                                SE = Sym->symbol_end(); SI != SE; ++SI) {
    if (!isa<SymbolData>(*SI))
      continue;

    if (const TaintTagType *Tag = State->get<TaintMap>(*SI)) {
      if (*Tag == Kind)
        return true;
    }

    if (const auto *SD = dyn_cast<SymbolDerived>(*SI)) {
      // If this is a SymbolDerived with a tainted parent, it's also tainted.
      if (isTainted(State, SD->getParentSymbol(), Kind))
        return true;

      // If this is a SymbolDerived with the same parent symbol as another
      // tainted SymbolDerived and a region that's a sub-region of that tainted
      // symbol, it's also tainted.
      if (const TaintedSubRegions *Regs =
              State->get<DerivedSymTaint>(SD->getParentSymbol())) {
        const TypedValueRegion *R = SD->getRegion();
        for (auto I : *Regs) {
          // FIXME: The logic to identify tainted regions could be more
          // complete. For example, this would not currently identify
          // overlapping fields in a union as tainted. To identify this we can
          // check for overlapping/nested byte offsets.
          if (Kind == I.second && R->isSubRegionOf(I.first))
            return true;
        }
      }
    }

    // If memory region is tainted, data is also tainted.
    if (const auto *SRV = dyn_cast<SymbolRegionValue>(*SI)) {
      if (isTainted(State, SRV->getRegion(), Kind))
        return true;
    }

    // If this is a SymbolCast from a tainted value, it's also tainted.
    if (const auto *SC = dyn_cast<SymbolCast>(*SI)) {
      if (isTainted(State, SC->getOperand(), Kind))
        return true;
    }
  }

  return false;
}
开发者ID:jvesely,项目名称:clang,代码行数:52,代码来源:Taint.cpp


注:本文中的SymbolRef::symbol_begin方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。