如何污染 Clang 静态分析器中的命令行参数

How to taint the command line arguments in Clang Static Analyzer

在 Clang Static Analyzer 中,我能够感染任何我感兴趣的 SVal。但是,我想知道如何感染命令行参数。这里有一个简单的例子:

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

因为没有主函数的调用者,所以我不能使用 precallpostcall 来获取 argv 的 SVal 作为以及 callExpr。我想clang一定是提供了这样一个接口来获取top frame函数的arguments.How可以获取吗? beginfunction 是唯一会在顶层框架函数开始时调用的挂钩函数,但 clang 传递给我们的唯一参数是 CheckerContext。我尝试从中获取 SVal,但失败了。

问题已解决!我挂钩 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();

这里我得到的是top frame函数第一个参数的SVal