I386 LinuxカーネルにQEMUを使用したスペース識別子をアドレスします
-
30-10-2019 - |
質問
友人、私は、コア、メモリ階層、相互接続などのさまざまなアーキテクチャパラメーターで実行されているコードのタイミング効果をシミュレートするために使用される社内のアーキテクチャシミュレーターに取り組んでいます。
私はモジュールに取り組んでおり、「Pintool」や「Qemu-Linux-User」などのエミュレータから実行中のプログラムの実際のトレースを取得し、このトレースをシミュレータに送ります。
今まで私のアプローチは次のようでした:1)バイナリ実行可能ファイルのobjdumpを取り、この情報を解析します。 2)これで、エミュレータは、Load-Address/Store-Addressなどの命令ポインターやその他の情報を提供するだけです。
このようなアプローチは、プログラムコンテンツが既知の場合にのみ機能します。
しかし今、私は標準的なLinux-Kernelの上で実行されている実行可能ファイルの痕跡を取得しようとしています。問題は、ベースカーネル画像にLKMのコード(ロード可能なカーネルモジュール)が含まれていないことです。また、カーネルを起動するときはデーモンは知られていません。
したがって、このソリューションに対する私のアプローチは次のとおりです。1)QEMUを使用してマシンをエミュレートします。 2)指示が初めて遭遇したら、私はそれを解析してこの情報を保存します。後で。 3)命令が実行されたときにIP、ロード/ストアアドレスを送信するヘルパー関数を作成します。
私はステップ2で立ち往生しています。エミュレータであり、ゲストOSについて何も知らないQEMUとの異なるプロセスを区別するにはどうすればよいですか?
ゲストOSのスケジューラを変更できますが、今後の道を理解することはできません。
質問が非常に長い場合は申し訳ありません。私はいくつかの部分を抽象化できたかもしれませんが、その一部が問題の文脈の説明を与えると感じました。
正しい解決策はありません