Использование libpcap.dylib в kext

Я пишу драйвер kext для OS X и хотел бы использовать функции из библиотеки libpcap.dylib, Libpcap.dylib находится в /usr/lib на OS X. Можно ли использовать его из пространства ядра? Как я могу использовать libpcap.dylib из kext, используя Xcode?

Мне удается скомпилировать - (-lpcap apears как опция ссылки), но:

  • получил предупреждение "unexpected dylib" по линкеру. Понятно, что как-то неуместно.
  • kextload не может разрешить зависимости libpcap.
  • kextlibs показывает только библиотеки, которые я включил в библиотеки OsBundleLibraries, что говорит о том, что мой dylib игнорируется.

Я в курсе подобного вопроса Linking Dylibs в Kexts? но я хочу знать, использовал ли кто-нибудь libpcap в kext.

2 ответа

Решение

WinPcap имеет компоненты пользовательского уровня и режима ядра, поскольку ядра Windows не предоставляют необходимых компонентов режима ядра.

В системах UN*X - например, в OS X - компоненты режима ядра являются частью ОС, а libpcap включает в себя только код режима пользователя.

В *BSD и OS X эквивалентом кода режима ядра WinPcap является BPF, который вы не сможете использовать из kext. Кроме того, BPF не имеет эквивалента для функции отправки очереди для синхронизированной передачи пакетов - вы можете отправлять пакеты, но это просто сразу же внедряет пакет в сетевой стек - так что ни с помощью libpcap из вашего kext, ни с использованием необработанного BPF из ваш kext, поможет вам с вашими потребностями времени.

Как отмечается в Linking Dylibs в Kexts?, невозможно загрузить dylib в ядро ​​через расширение ядра.

Вы не упоминаете, чего именно пытаетесь достичь, поэтому трудно понять, какие альтернативы будут иметь отношение к вам. Я бы посоветовал прочесть [Расширения сетевого ядра][1], чтобы узнать, можно ли использовать один из описанных ими методов вместо pcap. В качестве альтернативы, вы можете использовать pcap из пользовательской программы и общаться с ним из вашего расширения ядра.

Другие вопросы по тегам