【问题标题】:Developing a static source code analysis tool for proprietary API?为专有 API 开发静态源代码分析工具?
【发布时间】:2009-07-24 21:51:33
【问题描述】:

有一个基于 C++ 构建的专有 API。因此它使用了 C++ 的所有特性,然后拥有自己的 API。有一些 API 的功能与 C++ API 完全相同(比如 malloc 有 Stralloc),这些 API 是出于性能原因而提供的。

尽管有许多可用于 C++ 的静态代码分析器,但我们不能使用其中任何一个。需要有一个静态代码分析器,可以在具有专有 API 的代码上运行。

我想知道如何开始开发代码分析器。它可能不需要像 C++ 可用的那样非常面向功能。我想从基本的东西开始,比如报告未使用的变量、缓冲区溢出、内存泄漏。

任何指导将不胜感激。

[更新] 我发现以下问题正是我一直在寻找的,唯一的区别是,我关心的是专有 API 而不是 Java。到目前为止,我已经得到了几个很好的答案,但我真的很想从经历过这种发展的人那里了解更多。

Introduction to Static Analysis

【问题讨论】:

    标签: c++ static-analysis


    【解决方案1】:

    我很困惑:

    这是基于 C++ 的语言实现,还是只是基于 C++ 的一组 API?

    如果是后者,任何普通的 C++ 分析器都会捕获诸如内存泄漏和溢出之类的事情。

    【讨论】:

    • 但这样的分析器肯定会与 boost::bind、信号和其他向 C++ 添加非命令式范式的构造混淆。
    • 就像我提到的,有一些 API 可以用来代替 C++ API。例如,不使用 free(),而是使用 Strfree() API,它与 free() 完全相同,但出于性能原因使用。所以任何普通的 C++ 分析器都无法识别这一点。
    【解决方案2】:

    Coverity 和 Klocwork 等解决方案具有可扩展的规则集,您可以在其中编写自己的规则。您还可以配置该工具,以便他们的标准内存检查了解自定义内存分配器。但有一些限制。

    使用这些工具很有用,因为您可以借鉴相同的工作流程。同样,这取决于您拥有的代码以及您想要做什么。

    【讨论】:

    • 是的,使用现有工具比重新发明轮子更好。 Coverity 的文档不公开,但 Klocwork 的文档是公开的;请参阅 docs.klocwork.com/documentation/Tuning_C/…> 以获取为行为类似于 malloc 的函数创建知识库条目的示例。 (虽然如果你的源代码最终调用了 malloc,你甚至可能不需要这样做;Klocwork 可能会自己解决。)
    【解决方案3】:

    不要尝试从头开始编写。 C++ 是出了名的难解析,而且我认为你不会走得太远。

    您应该使用可扩展的 C++ 静态分析器,以便您可以编写自己的插件来分析您的库调用。在我的脑海中,我建议:

    • gcc C++ 前端(gcc 现在有插件)
    • EDG C++ 解析器
    • Rose(使用 EDG)
    • LLVM(可能使用 clang,但可能还没有为黄金时段做好准备)
    • Microsoft 的 Phoenix 框架(我认为它可以做到这一点,我没有检查过)。

    最好的答案可能是 clang 或 rose。

    【讨论】:

      【解决方案4】:

      在实践中解析 C++ 非常困难。如果你有一个 C++ 扩展方言,你需要一个完整的 C++ 解析器,它可以“轻松”适应你的方言,并且有能力构建分析工具。

      DMS Software Reengineering Toolkit 是完全可定制的通用分析和转换基础架构,提供通用解析、树构建、符号表构建和流分析功能。它用于构建完全自定义的分析器。

      它有一个C++ Front End 可以处理C++ 的几种标准方言,并且可以定制以处理其他扩展。 C++ 前端具有完整的预处理器功能、解析和构建 AST,并进行完整的 C++ 名称和类型分析。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多