8

Qemu を使用して、x86 ゲスト オペレーティング システムの実行用のメモリ トレースを生成するつもりです。

tcg wiki ページによると、Qemu はいくつかのヘルパーを使用して、ターゲット (ゲスト) メモリへのロード/ストアを生成します。この命令のリストはtcg_gen_qemu_ld8s/u、、、、tcg_gen_qemu_ld16s/uです。(店舗案内用に同様のセットをご用意しております)。上記の関数へのすべての呼び出しをtarget-i386/translate.cファイルにトラップしていますtcg_gen_qemu_ld32s/utcg_gen_qemu_ld64

ただし、次のような特定の命令のロード/ストアがまだありません

cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0

質問:

  1. 誰かが私が見逃している他のロード/ストアポイント(直接または間接)を指摘できますか??
  2. qemu はguest_read()、ゲストメモリからのすべてのロードをトレースするためにインストルメント化できる、ゲストメモリへのアクセス用の単一のエントリポイント機能 ( など) を提供しますか???
  3. qemuがゲストメモリの状態を維持する方法を理解できる優れたドキュメントを誰かが指摘できますか??

前回のメールで誤解を招くような指示をしてしまい申し訳ありません。

cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0

上記のすべての指示がtcg_gen_ld/stヘルパーでカバーされているようです。

しかし今、私は別の問題に出くわしました:
私は当初、ゲスト メモリとのやり取りはすべて、translate.c ファイルのヘルパー命令によって行われると考えていました。cmpxcgh8bただし、一部の命令のヘルパー関数cmpxchg16bは、実際にゲスト メモリにアクセスしていることがわかりました。

では、ゲスト メモリを読み取るためのエントリ ポイントが複数あるということですか。ゲストメモリにアクセスするために ldq および stq 命令がどのように変換されるのか説明してください。

4

1 に答える 1