Профилировщик памяти / анализатор для macOS kext

Прежде чем я начну изобретать колесо, я решил провести поиск, чтобы посмотреть, реализована ли где-то моя желаемая функция.
Как правило, я хотел бы проанализировать мой macOS kext и найти любые проблемы с памятью (особенно утечка памяти).

Более конкретно, я хочу найти профилировщик на основе кода (поскольку внешний профилировщик не поддерживает отладочные модули ядра), который используется в качестве оболочки для malloc / free.

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.

Вот вариант реализации, использующий двусвязный список, что при запросе на выделение с некоторым входным размером фактический malloc сделан для size + overhead где вторая часть должна содержать ссылки на предыдущее распределение и следующее распределение, а также метаданные (получение имени файла с использованием ФАЙЛ макрос и строка кода с использованием ЛИНИЯ макрос и, возможно, больше информации), адрес возврата является смещением overhead от фактического распределения, так что пользователь может обрабатывать только прочитанные данные.

на freeмы используем входной адрес — offset как фактический вклад в free поскольку это исходная выделенная память, но перед ее освобождением элемент должен быть надлежащим образом удален из связанного списка.

После анализа мы повторяем список и печатаем каждый элемент.

Обратите внимание, что есть некоторые детали реализации, такие как поддержка многопоточной среды путем блокировки раздела кода и вставки / удаления элемента из связанного списка.

В качестве альтернативы, возможно, есть плагин GDB / LLDB, который сканирует всю динамически выделяемую память (и печатает ее размер) …

P.S

В Windows есть такой модуль, который называется driver verifier что дает вашему модулю ядра возможности, указанные выше, и вам не нужно ничего перекомпилировать (это активируется во время выполнения) … есть ли такой инструмент в macOS?

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]