2

パッチを適用したいデバイスドライバがあります。このデバイスドライバーはIOLogを呼び出し、ログを削除したいと思います。

CALLL to IOLogをデバイスドライバー(kext)内の(対応する数の)NOPに置き換えると、カーネルがクラッシュし、スタックが破壊されたように見えます(「バックトレースが終了しました-無効なフレームポインター0」)。

ただし、同じ手法がユーザースペースで正常に機能します(たとえば、OS Xバイナリ内のNSLogをNOPpingします)。

ここで何が欠けていますか?

4

1 に答える 1

3

コールド パッチ (ディスク上のドライバー) を行うのか、ホット パッチ (メモリ内のドライバー) を行うのかについては説明していません。インメモリ パッチの場合、パッチを適用したときにドライバーが実行される、コードの一部がキャッシュされている CPU など、あらゆる種類の問題が存在する可能性があります。自己修正コードに関する Intel マニュアルのセクションを参照してください。

オンディスク パッチの場合、ターゲット アドレスの再配置レコードがある可能性があります。そのため、ドライバーがロードされると、動的モジュール ローダーがコード内の IOLog のアドレスを修正し、実際のアドレスに置き換えます。これにより、nop 命令が上書きされます。

于 2008-11-04T07:18:18.060 に答える