如何配置cppcheck来检测linux源代码中的内存泄漏

How to configure cppcheck to detect memory leaks in linux souce code

本文关键字:源代码 linux 泄漏 内存 检测 何配置 配置 cppcheck      更新时间:2023-10-16

我想尝试一些开源静态分析工具来检查它们在检测linux源代码泄漏方面的性能。我从cppchecker开始。在linux中,大多数内存分配调用都是通过kmalloc()、kzalloc()等函数进行的,相应的自由函数是kfree()。如何配置cppchecker来跟踪kmalloc调用,而不是默认的malloc()调用?有一种东西叫做创建一个新的配置文件,我们可以在其中定义用户偏好,但我不知道如何做到这一点。

作为上述问题的后续,cppcheck是否执行内存泄漏检测的过程间分析?我还可以使用哪些开源静态分析工具来实现此目的?

我是一名Cppcheck开发人员。

的确,kmalloc等有旧的内置处理。一个好的开始是用内置知识检查内核。不需要cfg文件。

但是,使用cfg文件可以增强cppcheck。

这是一个开始:

<?xml version="1.0"?>
<def format="1">
    <memory>
        <dealloc>kfree</dealloc>
        <alloc init="false">kmalloc</alloc>
        <alloc init="true">kzalloc</alloc>
    </memory>
</def>

将该文本保存在一个名为kernel.cfg的文件中,然后使用--library=kernel在cppcheck分析期间使用该信息。

这个cfg中有很多缺失的信息。如果使用--check cfg,当Cppcheck在分析过程中感到困惑并想要更多的cfg信息时,它会抱怨。它主要需要返回有关函数的信息,以及函数是否为"泄漏忽略"。

您可以查看我们的官方std.cfg文件,例如strcmp()的配置。此配置明确表示strcmp()不是noreturn。该配置还有一个"leak-ignore"属性,因为如果你可以将一个指向已分配内存的指针传递给strcmp(),那么泄漏检查器应该忽略这个属性,因为strcm()不会导致任何释放等。

如果您对它的工作原理有疑问,请告诉我们。

您确定cppcheck还不能检查内核分配泄漏吗?源代码看起来非常像对待kmalloc等等就像对待malloc一样。例如,查看cppcheck存储库中的testmemleak.cpp文件,您会看到执行错误kmalloc的测试用例。

就过程间分析而言,我不相信cppcheck能做到这一点。我推测GCC可能能够基于-flto标志做一些事情,但我不是专家。