我还是新手并且正在学习为静态铿锵声分析器编写检查器的方法。我需要在Linux上做检查,我已经从博客和网站上阅读了很多材料,但几乎所有材料都基于Xcode,而且没有一个能告诉我如何搜索特定的系统调用。
我正在尝试在Linux上编写一个检查程序,它可以告诉用户他们正在使用的系统调用是危险的,并显示它可能泄漏的原因。
有人能告诉我是否有可能做这种检查?如果它可以制作,我该怎么办?或者我在哪里可以找到这些材料呢?
答案 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
希望这足以让你开始吧!