友人、私はそれの上に実行されているプロセスを含むオペレーティングシステムの完全な実行をトレースしようとしています。このために、各プロセスとその実行トレースによって実行される命令が必要なので、各プロセスのobjdumpを実行しなくても済むようにしたいと思います。現在実行中のプロセスのpid
私の目標は次のとおりです。
1)各pidのビルドアドレススペース。
2)各pidの実行の追跡。
私は上記の目標を達成するために、エミュレータQemuの上にLinuxベースのオペレーティングシステムを実行しています。
qemuが最初に命令を検出すると、ゲストのio-portまたは既知の物理メモリアドレスを使用してこの命令を実行しているプロセスのpidを調べます。私はこの情報を使って、自分が望むものをやることができます。
私の問題は.... カーネル/ sched.cでは、次に実行されるプロセスのPIDを知ることができます。私は、 - > launch_process(pid)のような関数呼び出しを見つけることができないことを意味します。または、アドレス空間を追跡できる既知の場所がシステムにあります。 1つはCR3ですが、本当に信頼できません。
これは、この場所への簡単なポインタのように見えるかもしれませんが、私はこの場所を自分で見つけることができません。
@droid thanks ... context_switchは、プロセス実行のPIDが変更される機能です。ここでは、task_structを使用してコードを配置します。 pidの変更のための他のエントリポイントはありますか?この方法はsmpシステムにも有効でしょうか? –
私はカーネルに精通していないので、他のエントリーポイントには必ず答えます。 SMPに関して - 私はすべてが大丈夫だと思う。 –