問題タブ [xnu]
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.
multithreading - カーネル空間のリモート スレッドのバックトレースを表示する
カーネル空間でデバッグするとき、特定のタスクのすべてのスレッドのように、スレッドのグループの中からバックトレース フレームに従ってスレッドを検索したいことがあります。
たとえば、kernel_task id の取得
kernel_task に属するすべてのスレッドのダンプ
これで、スレッド ID やスレッドに関するその他の多くの情報を確認できますが、スレッドのバックトレースを観察するにはどうすればよいでしょうか?
c++ - IOKit ドライバーはロードされていますが、開始されていません
ハードウェア以外でトリガーされ、IOResources から派生する IOKit ベース ドライバーがあります。また、ユーザー空間のクライアントクラスにも提供しますIOServiceOpen
が、私の問題には関係ないと思います...派生ドライバーInfo.plistファイルに記載されているように、メインドライバーにはIOKit依存関係があります:
もう 1 つのドライバー ( で識別com.derived.driver
) は、一般的なカーネル拡張機能として実装され、 に格納され/Library/Extensions
ます。
ベースドライバーをロードすると、派生が自動的にロードされます。派生ドライバーが存在するため、/Library/Extensions
によって派生ドライバーをトリガーする前にロードすることもできますkextcache
。
ただし、派生ドライバーを汎用から IOKit 形式に変換すると動作が停止し、両方のドライバーIOProviderClass
がIOResources
.
派生ドライバーは、出力ログにエラーの兆候がなく、IOService ベースのクラスの開始を単に拒否しているようです (デバッガーを使用して、実際には到達IOService::probeCandidates
しないことを確認しましIOService::startCandidate
た。カーネルは最適化でコンパイルされたため、できませんでした正確な流れについては私の指を入れてください)。
現在ロードされkextstat
ているドライバーを見ると、両方のドライバーがロードされているように見えますioreg
が、ベースドライバーだけがアクティブなインスタンスを持っているようです (両方のドライバーが同じプロバイダーである IOResources を共有すると予想していました)。
さらに、しばらくすると、ロードされたkextから上位のドライバーが簡単に削除されたようです(おそらくアイドル状態のため)..
私の設計は合法に見えますか、それともIOProviderClass
ベースドライバーのフィールドをIOResources
派生ドライバーの IOService ベースのクラスに変更する必要がありますか?
編集:私は実際にそれを行いましたが、うまくいきました(すべてのインスタンスはioregに従って初期化されています)。
しかし、正直なところ、理由はわかりません。説明をいただければ幸いです。
ありがとう !
c++ - IOKit コードで「decltype」を使用する
IOKit ベースのカーネル エクステンションをコンパイルするとき、C++ コンパイラはキーワードを認識できませんdecltype
。
上記のコードでコンパイラが失敗した理由: Use of undeclared identifier 'decltype'
。一方auto
、キーワードは期待どおりに機能します。
ただし、C++ ユーザー モード アプリケーションでまったく同じコードをコンパイルすると、正常に動作します。
それはなぜですか?