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

OSICracker

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

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

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

OSICracker

问题解决了!我钩了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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Clang的静态分析器跟踪变量?

如何在源文件中禁用clang未使用的命令行参数错误

在clang命令行中覆盖参数

如何在Ubuntu 18.04上安装Clang静态分析器(扫描生成)?

如何为命令行PHP脚本触发XDebug分析器?

如何使用clang使未使用的命令行参数错误静音而不禁用它?

如何在Android / NDK上将命令行参数从gradlew.bat传递给Clang

如何防止在Jest测试中“污染”变量?

如何避免JavaScript中的原型污染?

如何防止JavaScript中的原型污染

在命令行下,如何编译F#词法分析器,然后在Mac OS上运行它?

命令行工具的静态分析器问题

如何重置无污染的全局计数器?

难以理解如何避免JavaScript中的跨域污染

如何使Clang Static Analyzer从命令行输出其工作?

Clang:如何将多个参数传递给 clang 插件

当 clang 运行链接器时,如何获得 clang 的路径?

“制作”失败并显示Clang错误-如何从Clang中获取错误?

clang 静态分析器内核是否支持多线程程序?

scan-build 或 Clang 静态分析器可以在链接时发现问题吗?

为什么 Clang 静态分析器认为这是 use-after-free?

如何将命令行参数值传递给静态变量到Java中的jar文件

GCC / Clang词法分析器和解析器

如何使用Clang的CUDA编译器?

如何使用windbg“ dt”命令从命名空间污染的内存转储中获取信息

如何在awk脚本中传递命令行参数

如何在Python中读取整数命令行参数?

如何在Shell Sript中读取命令行参数

如何从文件中获取命令行参数