問題タブ [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 - XNU は Kext に含まれます
フィールドにアクセスできるはずのKextに取り組んでいstruct proc->p_pid
ます。問題は、構造が XNU ソースでのみ定義されているため、incomplete definition of type 'struct proc'
コンパイル中にエラーが発生したことです。
私の観点からすると、自分のプロジェクトに XNU ヘッダーを含めることは悪臭を放つ解決策ですが、別の方法は何ですか? 構造をコピーして自分のコードに貼り付けるのですか?
kernel - IOBlockStorageDevice の kext で自分の BSD 名を見つける
これは本当に簡単なことだと思いますが、現時点では回避しています。ほとんどの例は、「BSD 名 /dev/disk を持っている場合、デバイスを見つける方法」を扱っていますが、デバイスを登録したばかりで、与えられた BSD 名を見つけたいと思っています。つまり、/dev/disk2.
基準を作ります
新しいデバイスのナブを作成します。
ここで、新しい nub に与えられた BSDName を知りたいと思います。net_lundman_zfs_zvol または net_lundman_zfs_zvol_device にあるかどうかは私には関係ありません。
私はちょうど私が呼び出すことができると思った
ただし、常に NULL です。それで、おそらく私は自分を見つけてそこからIOMedia *
電話しなければなりませgetProperty()
んか?
kernel - カスタム Darwin カーネルの使用
Mac OS (Mountain Lion、Darwin 2050.22.13) 用のカスタム カーネルを構築しています。カーネルを問題なくビルドでき、それに何かを追加できますが、何かが欠けています。
簡潔にするために、ここに私がやろうとしていることのサンプルがあります。
関数 [my_func(void*)] を追加して、bsd/kern/kern_fork.c を追加したいとします。インクルード ファイルを追加して osfmk/bsd に貼り付け、Makefile を変更して、新しい .h ファイルがBUILD/obj/RELEASE_X86_64/EXPORT_HDRS/ にコピーされるようになりました
関数名も config/BSDKernel.exports に追加しました。/mach_kernel に関数のシンボルが表示されているので、問題ないように見えます。
さて、ここがトリッキーな部分です。それ自体はトリッキーではありませんが、理解できません。私がやりたいことは、私が書いている kext から関数を呼び出せるようにすることです。基本的には、私にとってはある種のプライベート API になります。
kext は正常にコンパイルされますが、kextload/kextutil を実行すると、my_func シンボルが見つからないというエラーが表示されます。
(カーネル) kxld[com.blah.foo.kext]: 次のシンボルは、この kext によって解決されません (カーネル) kxld[com.blah.foo.kext]: _my_func
kextlibs の戻り値: すべてのアーキテクチャの場合: com.apple.kpi.libkern = 12.3
x86_64 の場合: ライブラリ kext に 1 つのシンボルが見つかりません
問題は、関数を kext から見えるようにするにはどうすればよいかということです。ありがとう!
process - KEXT からのプロセス情報の処理
KEXT 内で、proc_t または単に pid を取得する処理を行う必要があります。pid ルートに行くと、sysctl() のようなものを実行します。
残念ながら、どちらもできません。proc_t は未定義で、sysctl() も未定義です。sysctlbyname() を呼び出すことはできますが、kinfo_proc が定義されていません。proc_t を使おうとすると、コンパイラは [struct proc] の前方定義について文句を言う
ユーザーモードで使用するために sysctl() があると思いますが、proc_t を使用する方法はありますか? XNU/osfmk/bsd の include dir を使用しようとしましたが、再定義やその他のエラーのためにコンパイルできません。
それは少し戸惑い、私はまだ自分ができることとできないことについて頭を悩ませようとしています. 確かにこれは実行できますが、方法がよくわかりません。
c - フィルタ タイプが宣言されていませんか?
関数に渡すには をキャストする必要Interrupt Filter
がありますが、問題は、私の Xcode は常にFilter
型が宣言されていないことを教えてくれることです..
ここに私のコードの一部があります:
私は初めてなのでMac
、Xcode
この場合どうすればいいのかよくわかりません。
関数が実際にその型のパラメーターを取得しているときに、定義されていないことについてどのように不平を言うのでしょうか?
macos - IOKit kext のシンボル リンクが見つかりません
Apple の開発者サイトで提供されているこのチュートリアルに従いました。
実行するkextlib
と、2 つの未定義のシンボルが表示されます。出力は次のとおりです。
実行中:
出力をファイルにパイプすると、ヒット数が 0 になります。探しているシンボルがここにも存在しないことに気付きました。そして、それらを見つけたとしても、それらのシンボルをリンクする方法や、対応するライブラリをドライバーに見つける方法がわかりません。
どんな助けでも助けになります。IOKit ドライバーで作業するのはこれが初めてで、誰もこのエラーが発生していないようです。
OSX 10.8.4 と Xcode 5 DP5 を実行しています
前もって感謝します !
macos - なぜosxカーネルは何度もファイル操作を取得するのですか
(touch コマンドを使用して) ユーザー空間にファイルを作成します。1 つの OPEN 操作と 1 つの CLOSE ファイル操作のみが表示されると予想していますが、カーネル通知から 2 つの OPEN 操作と 3 つの CLOSE 操作を取得します。操作シーケンスは次のようになります: 開く --> 閉じる --> 開く --> 閉じる ---> 閉じる.... 誰かこれについてヒントを教えてくれませんか? 前もって感謝します。
macos - Mac プラットフォームでの動作を監視する方法
ファイルのオープン/書き込み/作成操作を取得しようとしています.ファイルの作成/削除....および他の操作のみを取得できるfsloggerを試しましたが、オープン/クローズ操作を取得できません。それを行うためのドライバーを書きました.開閉操作はできるのに作成操作ができない、しかもめんどくさい!たとえば、ファイルを開いて変更してから閉じると、ドライバーは多くのオープン/書き込み操作を取得します.ユーザーのオープン/クローズ操作が実際に原因であるかを判断する方法がありません..ヒントこれについて?ありがとう。