Clang 如何编写用于搜索特定系统调用的检查程序?

Clang 如何编写用于搜索特定系统调用的检查程序?,clang,system-calls,llvm-clang,clang-static-analyzer,Clang,System Calls,Llvm Clang,Clang Static Analyzer,我还是个新手,正在学习如何为静态clang analyzer编写检查程序。我需要在基于Linux的基础上进行检查,我从博客和网站上阅读了很多资料,但几乎所有的资料都基于Xcode,没有一个告诉我如何搜索特定的系统调用 我正在尝试在Linux上编写一个检查器,它可以告诉用户他们正在使用的系统调用是危险的,并说明它可能泄漏的原因 有人能告诉我是否可以做这种检查吗?如果可以制作,我应该怎么做,或者在哪里可以找到这些材料来制作呢?本指南内容丰富,包括在第34张幻灯片中识别对fopen的调用的示例。我强烈

我还是个新手,正在学习如何为静态clang analyzer编写检查程序。我需要在基于Linux的基础上进行检查,我从博客和网站上阅读了很多资料,但几乎所有的资料都基于Xcode,没有一个告诉我如何搜索特定的系统调用

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

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

本指南内容丰富,包括在第34张幻灯片中识别对
fopen
的调用的示例。我强烈建议你自己看看,但我会尝试总结最相关的部分,让你开始

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

void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
每次静态分析器引擎遇到调用事件时,都会调用检查器上的此成员函数。您只需定义函数来检查调用事件是否与您要检查的系统调用有关。在链接的示例中,他们正在寻找对
fopen
的调用,因此他们的
checkpostall
函数的开头如下所示:

if(Call.isGlobalCFunction("fopen"))
    //do stuff
希望这足以帮助您开始学习