0

OS X 用の kext ドライバーを作成しており、ライブラリーの関数を使用したいと考えていますlibpcap.dylib。Libpcap.dylib は OS X の /usr/lib にあります。カーネル空間から使用できますか? Xcode を使用して kext から libpcap.dylib を使用するにはどうすればよいですか?

なんとかコンパイルできました -- (-lpcap がリンク オプションとして表示されます)。

  • "unexpected dylib"リンカで警告を受けました。どういうわけか間違っていることは明らかです。
  • kextload は libpcap の依存関係を解決できません。
  • kextlibs は、私の dylib が無視されることを示唆する OsBundleLibraries を介してインクルードしたライブラリのみを表示します。

同様の質問Linking Dylibs in Kexts を認識していますか? しかし、誰かが kext で libpcap を使用したことがあるかどうか知りたいです。

4

2 に答える 2

2

Linking Dylibs in Kexts で述べたように? 、カーネル拡張機能を介してカーネルにdylibをロードすることはできません。

何を達成しようとしているのかについて言及していないため、どの代替案があなたに関連するかを知ることは困難です. [Network Kernel Extensions][1] を読んで、それらがカバーする手法の 1 つが pcap の代わりに使用できるかどうかを確認することをお勧めします。または、ユーザー空間プログラムから pcap を利用して、カーネル拡張機能から pcap と通信することもできます。

于 2013-02-28T11:31:25.800 に答える
1

Windows カーネルは必要なカーネル モード コンポーネントを提供しないため、WinPcap にはユーザー ランド コンポーネントとカーネル モード コンポーネントの両方があります。

UN*X システム (OS X など) では、カーネル モード コンポーネントは OS の一部であり、libpcap にはユーザー モード コードのみが含まれます。

*BSD および OS X では、WinPcap のカーネル モード コードに相当するものは BPF であり、kext からは使用できません。さらに、BPF には、パケットの同期送信を行う send-queue に相当するものはありません。パケットを送信することはできますが、すぐにネットワーク スタックにパケットを挿入するだけです。したがって、kext から libpcap を使用したり、kext から生の BPF を使用したりしません。あなたのkextは、タイミングのニーズに役立ちます.

于 2013-02-28T18:30:21.053 に答える