我想尝试一些开源的静态分析工具来检查它们在检测linux源代码泄漏方面的性能。在linux中,大部分内存分配调用都是通过kmalloc()、kzalloc()等函数进行的,相应的空闲函数是kfree()。我如何配置cppchecker来跟踪kmalloc调用,而不是默认的malloc()调用?有一个叫做创建新配置文件的东西,我们可以在这里定义用户首选项,但我不知道如何做到这一点。
另外,作为对上述问题的跟进,cppcheck是否执行内存泄漏检测的过程间分析?我还可以使用哪些其他开源静态分析工具来实现这个目的?
发布于 2014-10-10 10:15:02
我是个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的文件中,然后使用--库=内核在cppcheck分析期间使用该信息。
在这个cfg里有很多缺失的信息。如果你使用它主要不需要返回有关函数的信息,也不需要返回函数的“泄漏-忽略”信息。
您可以查看官方的std.cfg文件,例如strcmp()的配置。此配置明确表示strcmp()不返回。配置还有一个“泄漏-忽略”属性,因为如果您可以将指向分配内存的指针传递给strcmp(),那么泄漏检查器应该忽略这一点,因为strcmp()不会导致任何取消分配等等。
如果你对它的工作方式有疑问,请告诉我们。
发布于 2014-10-10 04:06:41
您确定cppcheck还不能检查内核分配漏洞吗?源代码看起来非常像对待kmalloc等等,就像malloc一样。例如,查看cppcheck存储库中的testmemleak.cpp文件,您就会看到使用一个不好的kmalloc的测试用例。
就过程间分析而言,我不认为cppcheck能做到这一点。我推测GCC也许能够在-flto旗帜的基础上做点什么,但我不是专家。
https://stackoverflow.com/questions/26290198
复制相似问题