我试图在随机时间对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工作?
答案 0 :(得分:1)
好的,我找到了答案,所以我在这里张贴给其他人:
在this discussion之后,我发现为了读取寄存器值,必须将KVM状态与QEMU同步。因此,在读取寄存器之前,需要调用kvm-all.c:kvm_cpu_synchronize_state()
。
没有它,你只会阅读陈旧的价值。