用于macOS kext的内存分析器/分析器

时间:2017-10-09 07:58:10

标签: c++ c memory-management kernel-extension xnu

在我开始发明轮子之前,我决定进行一些搜索,看看我的所需功能是否已在某处实现。 一般来说,我想分析我的macOS kext并查找任何内存问题(特别是泄漏的内存)。

更具体地说,我希望找到一个基于代码的探查器(因为外部探查器不支持调试内核模块),它用作malloc / free的包装器。

get

这是一个使用双向链表的实现选项,在具有一些输入大小的alloc请求时,实际malloc的大小为+ 1. on every malloc it record where you allocated the memory (file/line) 2. on every free, it remove this meta data (along with the memory itself). 3. on tear-down, it scans for all left dynamic memory regions and prints them out (along with their corresponding meta-data). This analysis may be called when unloading the driver, which is the point where all memory should be free. ,其中第二部分用于包含前一个分配和下一个分配的链接,和元数据本身(使用 FILE 宏和代码行使用 LINE 宏获取文件名,可能还有更多信息),返回地址是overhead的偏移量实际分配,以便用户只能处理读取数据。

overhead后,我们使用输入地址 - free作为offset的实际输入,因为这是原始分配的内存,但在释放之前,该项应该正确从链表中删除。

经过分析,我们迭代列表并打印每个元素。

请注意,有一些实现细节,例如通过锁定代码部分和从链表中插入/删除项来支持多线程环境。

或者,也许有一个GDB / LLDB插件扫描所有动态分配的内存(并打印其大小)......

P.S

在windows中有一个名为free的模块,它为你的内核模块提供上述功能,你不需要重新编译任何东西(它在运行时标志上激活)...是否有任何macOS上的这样的工具?

0 个答案:

没有答案