如何在启用KVM的情况下读取QEMU VM的寄存器?

时间:2015-12-17 14:55:26

标签: qemu kvm

我试图在随机时间对QEMU虚拟机的EIP寄存器进行采样。 为此,我在QEMU中创建了一个执行:

的线程
CPUState* cpu=/*code for choosing a random virtual cpu*/;
X86CPU *x86cpu = X86_CPU(cpu);
CPUX86State *env = &x86cpu->env;
while(true){
    waittime=(rand()%50000);
    usleep(waittime);
    eip = env->eip;
    printf("EIP= %zu\n",eip);
}

但是,它始终输出相同的值!

另一方面 - 如果我禁用KVM - 它可以完美地打印各种值...但我真的需要KVM工作......

如何使用KVM工作?

1 个答案:

答案 0 :(得分:1)

好的,我找到了答案,所以我在这里张贴给其他人:

this discussion之后,我发现为了读取寄存器值,必须将KVM状态与QEMU同步。因此,在读取寄存器之前,需要调用kvm-all.c:kvm_cpu_synchronize_state()

没有它,你只会阅读陈旧的价值。