問題タブ [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.
macos - ドライバーのlaunchd plistファイルを削除した後、kextcacheを無効にします
/Library/LaunchDaemons
ドライバーのアンインストーラーを作成しました。これは、次の起動サイクルで launchd によって再度読み込まれないように、一致する plist ファイルを削除します。ただし、マシンの起動後にまだ正常にロードされているドライバーには何の影響もないようです。
この問題についていくつかの調査を行った後、これがkextcache
この動作の理由であることがわかりました。クリーン/無効化するにtouch
は、インストール先のボリュームがあるフォルダーに移動する必要があります。ただし、効果はありませんでした。
私の質問は、対応する plist ファイルが削除された後に launchd が kext をロードしないように、kext キャッシュを適切に無効にする方法です。
以下の回答のおかげで、kext キャッシュを無効化できました。ただし、アンインストーラーヘルパーが基づいているobjective-cの既存のフォルダーにアクセスするための同等のものを用意したいと思います。
正確には、Objective-C に変換したいコードは次のとおりです。
sudo touch /System/Library/Extensions; sudo touch /Library/Extensions
mach-o - Mach-O 実行可能ファイルをロードするには何が必要ですか?
Mach-O 実行可能ファイルを手書きしようとしています。次の 3 つのロード コマンドがあります。
LC_SEGMENT_64
読み込み中__PAGEZERO
LC_SEGMENT_64
ロード__TEXT
中、単一の__text
セクションでLC_UNIXTHREAD
適切に設定されたrip
mach/loader.h
すべてのコマンドは、構造体と関連するヘッダーに一致します。otool -l
期待どおりに情報がリストされ、エラーは報告されません。すべてのアカウントで、これは整形式のオブジェクト ファイルですが、OS X 10.10.5 はタスクを終了します (SIGKILL)。
OS X がロードする前に、Mach-O 実行可能ファイルのどの機能がチェックされますか? この情報はどこにありますか? これらの機能はバージョンごとに変更されますか? (よく引用される「OS X ABI Mach-O リファレンス」は明らかに欠落しています。)
これは、部分的に注釈が付けられたバイナリの 16 進ダンプです。
otool
健全性チェック (抜粋):
macos - Mac OS X でシステム コールをキャッチする
自作プログラムを使用して、特定の PID によって呼び出されるすべてのシステム コールをキャッチしようとしています (strace、dtruss、gdb のいずれも使用できません...)。
kern_return_t task_set_emulation(task_t target_port, vm_address_t routine_entry_pt, int routine_number)
だから私はで宣言された関数を使用しました/usr/include/mach/task.h
。
syscall をキャッチする小さなプログラムを作成しましたwrite
。
出力は次のとおりです。
カーネル エラー 46 はKERN_NOT_SUPPORTED
、「空のスレッド アクティベーション (スレッドがリンクされていません)」として説明されているマクロに対応し、/usr/include/mach/kern_return.h
を呼び出す前に発生していwrite
ました。
私の質問は次のとおりです。このプロセスで何が間違っていましたか? Kern_not_supported は、無意味なスレッドの問題ではなく、まだ実装されていないことを意味しますか?
macos - Mac OS で SIP がオフになっているが、kext を読み込めない
私は、kextプログラミングが初めてなので、私の問題は次のとおりです。
私は、macOS 10.11.6 を実行しています。SIP をオフにしましたが、kextloadと -v フラグを使用して kext をロードしようとすると、kext が正常にロードされたことがわかります。
kext がロードされたことを確認するために、kextstatを使用しました。
しかし
、次のコマンドを使用して/var/log/system.logからカーネルログを追跡すると:tail -f /var/log/system.log
そのエラーが表示されます:
allowing invalid signature -67050 0xFFFFFFFFFFFEFA16 for kext
私の kext は単純な Hello World kext で、私のコードがあります
助けてくれてありがとう
編集:
多くのテストの後、kextが正常にロードされたように見えますが、コード署名の問題に関しては、Xcodeビルド設定を調べたところ、コード署名が見つかりました。コード署名にはコード署名IDがあるため、 Don'tに設定しましたコードに署名し、Xcodeビルドツールを使用してビルドしまし xcodebuild -configuration Debug -target kern
たが、まだ進歩していないので、誰かが少なくともリンクなどを提供してくれることを願っています.
macos - MacOS ドライバーで SIGKILL をキャッチ
現在、SIGKILL が原因で停止していると思われるデーモンをデバッグしています。
私のプロセス向けのシグナルをキャッチし、このプロセスが得たプリントアウトを追加したいと思います。
プロセス レベルのシグナル ハンドラでは SIGKILL をキャッチできないことはわかっているので、kext を使用することにしました。
xnu ソース コードを調べたところ、psignal
それがシグナルをターゲット プロセスに渡すメソッドであることがわかりました。ただし、トランポリンを使用してパッチを適用しようとしましたが、このメソッドは static という名前の別の静的メソッドを呼び出すだけpsignal_internal
であり、おそらくコンパイラの最適化によって排除されます。
おそらく、sigkill のこのイベントをキャッチするのに役立つ何らかのメカニズムを取得し、この場合に適切なコールバック関数を設定するオプションを提供する他の方法があるでしょうか?
ありがとう