0

我正在为 OS X 编写一个 kext 驱动程序,并且想使用库中的函数libpcap.dylib。Libpcap.dylib 位于 OS X 上的 /usr/lib 中。它可以从内核空间使用吗?如何使用 Xcode 从 kext 中使用 libpcap.dylib?

我设法编译——(-lpcap 作为链接选项出现)但是:

  • 链接器发出警告"unexpected dylib"。很明显,它以某种方式放错了位置。
  • kextload 无法解析 libpcap 依赖项。
  • kextlibs 仅显示我通过 OsBundleLibraries 包含的库,表明我的 dylib 被忽略。

我知道类似的问题Linking Dylibs in Kexts? 但想知道是否有人在 kext 上使用过 libpcap。

4

2 回答 2

2

正如在Kexts 中链接 Dylibs 中所述?,无法通过内核扩展将 dylib 加载到内核中。

您没有提及您要实现的目标是什么,因此很难知道哪些替代方案与您相关。我建议阅读 [Network Kernel Extensions][1],看看是否可以使用其中一种技术来代替 pcap。或者,您可以使用用户空间程序中的 pcap 并通过内核扩展与它进行通信。

于 2013-02-28T11:31:25.800 回答
1

WinPcap 具有用户态组件和内核模式组件,因为 Windows 内核不提供必要的内核模式组件。

在 UN*X 系统上——例如,在 OS X 上——内核模式组件是操作系统的一部分,而 libpcap 只包含用户模式代码。

在 *BSD 和 OS X 中,WinPcap 的内核模式代码的等价物是 BPF,您将无法从 kext 中使用它。此外,BPF 没有等同于 send-queue 的东西来同步传输数据包——你可以发送数据包,但这只是立即将数据包注入网络堆栈——所以既不使用你的 kext 中的 libpcap,也不使用来自你的原始 BPF您的 kext 将帮助您满足您的时间需求。

于 2013-02-28T18:30:21.053 回答