使用Clang进行动态检测

Rob*_*ney 5 c clang

我正在尝试通过使用C(也许是C++)执行一些动态代码检测来快速使用Clang,其中我获取源文件并生成检测输出.我想在任何块的开头添加一个函数调用,并且还要更改所有布尔表达式以调用某个函数,这样我也可以跟踪它.例如:

foo = a && (b || c);
Run Code Online (Sandbox Code Playgroud)

会变成这样的:

foo = EXPR_AND(a, EXPR_OR(b, c));
Run Code Online (Sandbox Code Playgroud)

因此我可以跟踪发生的所有条件组合.

我假设使用RecursiveASTVisitor是最好的方法,但是有一种简单的方法可以为我访问的每个节点输出C代码吗?

任何有关如何完成这样的事情的建议都将非常感激!

注意:经过一些进一步的调查,我刚刚发现了libclang,看起来它可能是我最好的朋友.再加上一个改写者,我可能只有我需要的东西.任何指向良好示例的指针(我刚刚发现优秀的Apple开发人员在libclang上开会视频)都会很棒.

Dan*_*oni 2

有关一个很好的示例,请参阅此项目

它使用 clang 来检测调用函数的进入和退出,并且还检查传递参数的类型。