Я разобрал рассматриваемую функцию (_utilPurgeDiskBuffers
) из среды CHUD. Эта функция не кажется слишком сложной, но, поскольку я не программист MacOS, импорт и вызываемые sys API не имеют для меня особого смысла.
Первое, что API делает, это вызывает другую функцию, а именно _miscUtilsUserClientConnect_internal
. Эта функция, кажется, устанавливает соединение с расширением ядра CHUD.
Для этого он вызывает _getCHUDUtilsKextService
, который пытается найти расширение ядра CHUD, перечисляя все кексы с помощью IORegistryCreateIterator
, импортированного из набора ввода-вывода. После того, как kext был найден, он открывается через _IOServiceOpen
.
На данный момент у нас есть связь с файлом CHUD (по крайней мере, так я понимаю из списка разборки).
Наконец-то сделан вызов IOConnectMethodStructureIStructureO
, который, я думаю, совершает настоящую магию.
Не зная внутренних деталей или подписи этой функции, параметры не имеют смысла для меня.
А вот разборка:
__text:4B0157A7 lea eax, [ebp+var_1C]
__text:4B0157AA mov dword ptr [esp+14h], 0
__text:4B0157B2 mov [esp+10h], eax
__text:4B0157B6 mov [esp+0Ch], eax
__text:4B0157BA mov dword ptr [esp+8], 0
__text:4B0157C2 mov dword ptr [esp+4], 0Eh
__text:4B0157CA mov [esp], edx
__text:4B0157CD call _IOConnectMethodStructureIStr
Обратите внимание, что var_1C
был обнулен ранее.
Надеюсь, некоторые из вас найдут больше смысла в этих системных вызовах. Если вам нужна дополнительная информация, дайте мне знать.
Обновление:
Для начала просто возьмите пример AppleSamplePCIClient.c
из комплекта IO kit SDK. Это в основном то, что делает приложение очистки из инструментов CHUD.
Единственное, что вам нужно изменить, - это параметры последнего вызова _IOConnectMethodStructureIStr
. Возьмите их из списка разборки выше. Я не могу проверить все это, так как у меня нет Mac.