NOPに置き換えることでCALLLを修正することは、ユーザー空間では機能しますが、カーネル空間では機能しません。

StackOverflow https://stackoverflow.com/questions/261021

質問

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

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

ただし、同じ手法がユーザー空間で正常に機能します(例:OS Xバイナリ内のNSLogsのNOPping)。

ここで不足しているものは何ですか?

役に立ちましたか?

解決

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top