операции с памятью qemu

Я намерен использовать Qemu для создания трассировки памяти для выполнения гостевой операционной системы x86.

Согласно вики-странице tcg, Qemu использует несколько помощников для загрузки/сохранения в целевую (гостевую )память. Это список инструкций tcg_gen_qemu_ld8s/u, tcg_gen_qemu_ld16s/u, tcg_gen_qemu_ld32s/u, tcg_gen_qemu_ld64. (У нас есть аналогичный набор инструкций по хранению ). Я перехватываю все вызовы вышеуказанных функций в файле target -i386/translate.c

Однако мне по-прежнему не хватает загрузки/сохранения некоторых инструкций, таких как

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 переводятся для доступа к гостевой памяти??

8
задан dashesy 21 May 2015 в 03:00
поделиться