gpt4 book ai didi

memory-management - 如何检测谁发出了错误的 kfree

转载 作者:行者123 更新时间:2023-12-04 07:43:39 25 4
gpt4 key购买 nike

我怀疑我的内核代码中存在双重 kfree。基本上,我有一个在模块中被 kzalloced 和 kfreed 的数据结构。我注意到相同的地址被分配然后再次分配而没有在模块中被释放。

我想知道我应该使用什么技术来找到发出错误 kfree 的位置。

最佳答案

1.是的,kmemleak 是一个优秀的工具,特别适合系统范围的分析。

请注意,如果您打算使用它来分析内核模块,您可能需要保存包含模块代码的 ELF 部分的地址(.text,.init.text,...)模块已加载。这可能会帮助您破译 kmemleak 报告中的调用堆栈。在模块卸载后要求 kmemleak 生成报告通常是有意义的,但 kmemleak 无法在那时解析地址。

加载模块时,可以在 /sys/module/<module_name>/sections/ 中的文件中找到其部分的地址。 .

找到报告中每个代码地址所属的部分以及该部分的相应偏移量后,您可以使用 objdump、gdb、addr2line 或类似工具来获取有关感兴趣事件发生位置的更多详细信息。

2。除此之外,如果您在 x86 系统上工作并且想要分析单个内核模块,您还可以使用 KEDR LeakCheck tool .

与 kmemleak 不同,大多数情况下,不需要重建内核即可使用 KEDR。

关于如何构建和使用 KEDR 的说明是 here . “检测内存泄漏”部分描述了如何使用 LeakCheck 的简单示例。

关于memory-management - 如何检测谁发出了错误的 kfree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12276969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com