如何编写检查器来搜索特定的系统调用?

时间:2018-03-12 18:38:09

标签: clang system-calls llvm-clang clang-static-analyzer

我还是新手并且正在学习为静态铿锵声分析器编写检查器的方法。我需要在Linux上做检查,我已经从博客和网站上阅读了很多材料,但几乎所有材料都基于Xcode,而且没有一个能告诉我如何搜索特定的系统调用。

我正在尝试在Linux上编写一个检查程序,它可以告诉用户他们正在使用的系统调用是危险的,并显示它可能泄漏的原因。

有人能告诉我是否有可能做这种检查?如果它可以制作,我该怎么办?或者我在哪里可以找到这些材料呢?

1 个答案:

答案 0 :(得分:1)

本指南How to write a Checker in 24 hours内容非常丰富,其中包含了在第34张幻灯片中识别对fopen的调用的示例。我强烈建议您自己查看,但我会尝试总结最相关的部分,以帮助您入门。

每个检查器都会注册调用的回调函数来检查某些属性。在您的情况下,您的检查员将使用呼叫事件功能:

void checkPostCall(const CallEvent &Call, CheckerContext &C) const;

每次静态分析器引擎遇到调用事件时,都会调用检查器上的此成员函数。您只需定义函数以检查调用事件是否是您正在检查的系统调用。在链接示例中,他们正在寻找fopen的调用,因此checkPostCall函数的开头看起来像这样:

if(Call.isGlobalCFunction("fopen"))
    //do stuff

希望这足以让你开始吧!