Qemu を使用して、x86 ゲスト オペレーティング システムの実行用のメモリ トレースを生成するつもりです。
tcg wiki ページによると、Qemu はいくつかのヘルパーを使用して、ターゲット (ゲスト) メモリへのロード/ストアを生成します。この命令のリストはtcg_gen_qemu_ld8s/u
、、、、tcg_gen_qemu_ld16s/u
です。(店舗案内用に同様のセットをご用意しております)。上記の関数へのすべての呼び出しをtarget-i386/translate.cファイルにトラップしていますtcg_gen_qemu_ld32s/u
tcg_gen_qemu_ld64
ただし、次のような特定の命令のロード/ストアがまだありません
cmp ecx, [r12+0x4]
mov r10b, [r13+0x0]
mov byte [rax+0xf0000], 0x0
mov byte [rax+rdx], 0x0
質問:
- 誰かが私が見逃している他のロード/ストアポイント(直接または間接)を指摘できますか??
- qemu は
guest_read()
、ゲストメモリからのすべてのロードをトレースするためにインストルメント化できる、ゲストメモリへのアクセス用の単一のエントリポイント機能 ( など) を提供しますか??? - 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 命令がどのように変換されるのか説明してください。