問題タブ [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.

0 投票する
1 に答える
415 参照

multithreading - カーネル空間のリモート スレッドのバックトレースを表示する

カーネル空間でデバッグするとき、特定のタスクのすべてのスレッドのように、スレッドのグループの中からバックトレース フレームに従ってスレッドを検索したいことがあります。

たとえば、kernel_task id の取得

kernel_task に属するすべてのスレッドのダンプ

これで、スレッド ID やスレッドに関するその他の多くの情報を確認できますが、スレッドのバックトレースを観察するにはどうすればよいでしょうか?

0 投票する
1 に答える
266 参照

c++ - IOKit ドライバーはロードされていますが、開始されていません

ハードウェア以外でトリガーされ、IOResources から派生する IOKit ベース ドライバーがあります。また、ユーザー空間のクライアントクラスにも提供しますIOServiceOpenが、私の問題には関係ないと思います...派生ドライバーInfo.plistファイルに記載されているように、メインドライバーにはIOKit依存関係があります:

もう 1 つのドライバー ( で識別com.derived.driver) は、一般的なカーネル拡張機能として実装され、 に格納され/Library/Extensionsます。

ベースドライバーをロードすると、派生が自動的にロードされます。派生ドライバーが存在するため、/Library/Extensionsによって派生ドライバーをトリガーする前にロードすることもできますkextcache

ただし、派生ドライバーを汎用から IOKit 形式に変換すると動作が停止し、両方のドライバーIOProviderClassIOResources.

派生ドライバーは、出力ログにエラーの兆候がなく、IOService ベースのクラスの開始を単に拒否しているようです (デバッガーを使用して、実際には到達IOService::probeCandidatesしないことを確認しましIOService::startCandidateた。カーネルは最適化でコンパイルされたため、できませんでした正確な流れについては私の指を入れてください)。

現在ロードされkextstatているドライバーを見ると、両方のドライバーがロードされているように見えますioregが、ベースドライバーだけがアクティブなインスタンスを持っているようです (両方のドライバーが同じプロバイダーである IOResources を共有すると予想していました)。

さらに、しばらくすると、ロードされたkextから上位​​のドライバーが簡単に削除されたようです(おそらくアイドル状態のため)..

私の設計は合法に見えますか、それともIOProviderClassベースドライバーのフィールドをIOResources派生ドライバーの IOService ベースのクラスに変更する必要がありますか?

編集:私は実際にそれを行いましたが、うまくいきました(すべてのインスタンスはioregに従って初期化されています)。

しかし、正直なところ、理由はわかりません。説明をいただければ幸いです。

ありがとう !

0 投票する
1 に答える
76 参照

c++ - IOKit コードで「decltype」を使用する

IOKit ベースのカーネル エクステンションをコンパイルするとき、C++ コンパイラはキーワードを認識できませんdecltype

上記のコードでコンパイラが失敗した理由: Use of undeclared identifier 'decltype'。一方auto、キーワードは期待どおりに機能します。

ただし、C++ ユーザー モード アプリケーションでまったく同じコードをコンパイルすると、正常に動作します。

それはなぜですか?