如何在Clang Static Analyzer中污染命令行参数

时间:2018-07-11 06:17:56

标签: c++ clang-static-analyzer

在Clang静态分析器中,我有能力污染任何我感兴趣的SVal。但是,我想知道如何污染命令行参数。一个简单的例子在这里:

int main(int argc, char **argv)
{
   memcpy(xxx,argv[0],xxx);
}

因为没有调用主函数的函数,所以我不能使用 precall postcall 来获取argv的SVal以及 callExpr 。我认为clang必须提供了这样的接口来获取顶级框架函数的参数,我怎么能得到它呢? beginfunction 是唯一在顶层框架功能开始时调用的钩子函数,但传递给我们的唯一参数clang是 CheckerContext 。我尝试从中获取SVal,但失败了。

1 个答案:

答案 0 :(得分:0)

问题解决了!我钩了 beginfunction ,代码是

StoreManager & store = C.getStoreManager();
const ParmVarDecl *pdecl = C.getCurrentAnalysisDeclContext()->getDecl()->getAsFunction()->getParamDecl(0);
const Loc loc = store.getLValueVar(pdecl,C.getLocationContext());
ProgramStateRef state = C.getState();
Store s = state->getStore();
store.getBinding(s,loc).dump();

在这里,我得到顶部框架函数的第一个参数的SVal。