3

LinuxプロセスのCPUID命令をトラップしていじるきちんとした方法を探しています。ptrace() をいじって、プロセスによって作成されたすべての実行可能な mmap 領域内のすべての cpuid オペコードにパッチを適用し、それらを int3 に置き換えました。CPUID オペコード バイトが他の長いオペコードの一部として頻繁に現れるため、うまく機能しませんでした。

基本的に、特定のメモリアドレスではなく、オペコードの呼び出しごとにブレークポイントを設定できる方法を探しています。誰でもそれを行う方法を知っていますか?

4

2 に答える 2

1

私が知っている簡単で良い方法はありません。

GDB の Python スクリプト API を使用して、プログラムを自動的にシングルステップ実行し、実行前に各命令を調べるという厄介な方法があります。

もう 1 つの厄介な方法は、オープンソースの x86 エミュレーターであるBochsなどのソースを取得し、目的の命令が実行されたときに必要な動作を行うように変更することです。

于 2009-09-17T18:41:11.213 に答える