問題タブ [kernel-extension]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - NKEを使用してHTTPパケットをスニッフィングする
NKEを使用してKEXTを作成し、httpの要求と応答を読み取ろうとしています。ソケットフィルターを登録しました。データを取得するたびに、次のようなコードを使用してmbufを出力しています。
ログからhttpリクエストと一部のレスポンスデータを読み取ることはできますが、 HTMLコンテンツを表示できません。mbufを正しく読んでいないのか、それとも他の問題なのか疑問に思いました。
xcode - Mac での KEXT の開発とデバッグ
Xcodeを使用してMacでKEXTを開発しています。コンパイルするたびに、ターミナルを介して権限を変更し、KEXTをロードしてから、コンソールアプリから結果を読み取ります。システムにカーネル パニックを引き起こし、Mac を再起動する必要がある開発中のいくつかのミスは、非常に厄介です。KEXT を開発およびデバッグするためのより良い方法があるかどうか疑問に思っていましたか?
macos - kext が時々ロードされない
開発された kext で、ランダムな kext の読み込みに問題があります。基本的に、kext は必要に応じてマウス DPI を更新するように書かれています。kext 1 に関連するポイントをいくつか示します。kext ドライバ クラスは IOHIDEventDriver クラスから派生しているため、dispatchRelativePointerEvent 関数でポインタの動きが変更されます。DPI セットに基づいて、dispatchRelativePointerEvent で x と y の値を更新し、super::dispatchRelativePointerEvent を呼び出します。2. 情報 plist には、IOKitPersonalities の下のデバイスの IOProviderClass、idProduct、および idVendor として IOHIDInterface があります。3. kextutil は、ビルドされた kext に問題がないことを示しています。4. "/System/Library/Extensions/" の下に kext をインストールした後、sudo touch を実行します。5. 最後にマシンを再起動します。
次回の起動時に、kext が読み込まれてデバイスが検出され、すべて正常に動作します。しかし問題は、kext をアンロードして kext を再度インストールすると、次回の再起動時に kext がロードに失敗することがあります。問題の原因がわからない。何が間違っているのか誰にも分かりませんか?IOKitPersonalities に問題はありますか? プローブ スコアの一致に問題がある場合は、毎回発生するはずです。ここでプローブスコアが問題を引き起こしていますか?
macos - kextからplistを読む
OSの再起動の間にkext設定を保存したいのですが。kextをすぐにロードした後、設定が必要なため、デーモンの起動を管理するのが待ちきれません。kextからkextplistファイルを読み書きする方法ですか、それとも他の方法ですか?
macos - プロセスがネットワークカーネル拡張でroot権限を持っているかどうかを判断するにはどうすればよいですか?
私はソケットフィルターkextを書いていますが、rootとして行われた接続はすべて無視したいと思います。OS X Lion以前は、次のコードは問題なく機能していました。
しかし、LionとMountain Lionを使用すると、is_root()
関数は常にtrueを返します。Snow Leopardでは、想像どおりに機能しました。
ソケットフィルターイベントハンドラー内で関数をテストした例を次に示します。
ただし、出力には常に「ルート」と表示されます。次に例を示します。
接続するアプリがTwitterである場合(PIDで確認)。Twitterは、rootではなく通常のユーザー権限で実行されます。
ソケット接続の背後にあるプロセスにroot権限があるかどうかを判断するためのより良い/正しい方法はありますか?
macos - OSXKextが適切に解放されていない
私は、 Wagerlabsコード(ドライバー-ユーザークライアント-アプリケーションモデルを使用)にある程度基づいて、ホットプラグSCSIデバイス用のデバイスドライバーkextを作成しましたが、すべてが機能します。残っている唯一の懸念は、特にアプリケーションがクラッシュした場合に、ドライバーが一貫して解放されていないように見えることです。たとえば、デバイスを切断してアプリケーションを閉じた場合でも、kextをアンロードしようとすると、ドライバーとユーザークライアントの未処理のインスタンスがまだ存在します(ドライバーは通常、ユーザークライアントよりも数が多い)。
のようなドライバー関数にログインしていfree()
ますが、コンピューターをシャットダウンすると、これらが実行されていることがわかります。そのため、インスタンスは明らかに終了できます。ホストアプリケーションがクラッシュしたり、不適切に終了したり、通常は計画どおりに進まなかったりした場合でも、ドライバーインスタンスが終了して解放されるようにするための「正しい」方法は何ですか?
macos - カーネル拡張をアンロードできません。クラスにはインスタンスがあります
オーディオデバイスドライバー用のOSXカーネル拡張機能を作成しています(これはソフトウェアですが、ハードウェアデバイスをエミュレートします)。
開発中は、既存の古いバージョンを完全にアンインストールしてから、新しいバージョンを最初からビルドしてインストールすると便利です。ただし、これはシステムを再起動しないと不可能な場合があります。
プログラム自体が実行されておらず、ソースファイルがディレクトリから削除されています/System/Library/Extensions/
。
しかしkextstat
、単一のインスタンスを明らかにします:
(...意味:)
したがって、私のドライバーインスタンスには0の参照がありますがkextunload
、既存のインスタンスに不平を言って失敗することがあります。
これが発生した場合、(私が知っている)kextを「強制的にアンロード」する方法はありません。
実行中のOSカーネルによってメモリに保持されている参照のために、この単一のインスタンスがまだ存在していると推測するのは正しいですか?それは正しくないようです。なぜなら、それkextunload
は常に失敗するからです。では、なぜkextunload
すべてのドライバインスタンスを「完全に」アンロードするためにシステムの再起動が必要になることがあるのでしょうか。
objective-c - OSReturn値を人間が読める形式の定義に変換する
からの関数のいくつかを使用して、IOKit/kext/KextManager.h
カーネルに拡張機能をプログラムでロードしていますが、新しいエラー値が発生しています。例えば:
この値を、にある人間が読める形式の定義の1つに変換するにはどうすればよいlibkern/OSReturn.h
ですか?
usb - 10.7 での kext hid のアンロードは失敗しましたが、10.6 では問題なく動作します
ネットワーク経由でLinuxボックスに接続されたMacOSX(Windowsはすでに実行中)用の仮想USBバスドライバーに取り組んでいます。10.6 および 10.7 では、大容量記憶装置とマウスやキーボードなどの HID デバイスを使用して正常に動作します。
ただし、10.7(.5) 未満の HID デバイスでは、デバイスの削除 (プラグの抜き取り) または単純なアンロードは、1 つのインスタンスが残っているため失敗します (デタッチ後に保持カウントがゼロにならない)。私の 10.6 と 10.7 のテスト環境は、まったく同じ MacBooksPro 8.2 i7 です。
しばらくすると (5 ~ 50 分)、私の側から何もしなくても kext が解放されることがあります。電力モードの変更には依存しないようです。
はい、USBFamily のログ ライブラリと多くの出力がありますが、動作中 (kextunload OK) と動作していない実行の間で、ログ レベル 7 でもログに違いはありません。
大容量ストレージ デバイスがうまく動作しているように見えるため、問題は特に 10.7 未満のダイ HID ドライバー スタック内にあると思いますか?
10.6 と 10.7 の間で USB HID デバイス ドライバー スタックを削除する既知の違いはありますか?
私のkextは、(リモートLinuxボックスで)実際に接続されたUSBデバイスのUSBDeviceを確立/作成する(仮想)ControllerV3派生クラスです。XCode 4.4.1 を使用。
アイデアやヒントを事前にありがとう、Markus
PS: 10.7 未満で非常に多くの HID オブジェクトがドライバー スタックの上にあることは、私には少し奇妙に見えます。kextunload の後 (「..VirDevice has 1 instance」というエラーで)、それらはまだ生きているように見えます。しかし、これは 100% ローカルで接続されている、または接続されていない Logitech マウスと同じです。
私からは、オブジェクト MsVirBus (IOUSBControllerV3 から派生した仮想 USB バス) と Mouse@xaffe003f の両方のオブジェクトが IOUSBDevice 派生オブジェクトであることが最低です。
macos - HID デバイスがデフォルトの Mac ドライバーに誘拐される
私のアプリケーションは、プラグインした HID デバイスにアクセスしようとしていますが、IOHIDDevice ドライバーによって既に要求されているため、デバイスの要求は機能しません。私が学んだことを防ぐために、Mac(OSX 10.8.2)用のコードレスkextドライバーを作成してインストールし、デバイスがロードされないようにブラックボックス化する必要があります。
私はすでに 2 日間過ごしましたが、これまでのところ成功していません。私のテストケースでは、見つけることができます
- USB プローバーからのログ
- コードレス kext モジュール
- デバイスが接続されているときのioregからの出力
ここにファイルを添付できないようです。
http://www.guenther-sohler.net/testcase.tar.gzからダウンロードしてください。