Использование 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 из пользовательской программы и общаться с ним из вашего расширения ядра.