2014-09-06 3 views
1

Я застрял в задаче в качестве заголовка says.I хочет сделать это в VMM пути добавленияIntercept инструкция RDTSC из гостевой виртуальной машины в пользовательском пространстве KVM

в CPU_BASED_RDTSC_EXITING флага в vmx.c (арочный/x86/квм) в setup_vmcs_config функции и

затем обрабатывать vm_exit сам (исх это: mail list) .Отель вопрос заключается в том, что я не могу

сказать, является ли vm_exit из RDTSC вызвана гостевой ядра или Гость vm пользователя

пространство приложения, последний из них является то, что именно я хочу intercept.I пытался искать

через для QEMU КМК-1.2.0 ЦСИ, чтобы найти другие способы перехвата инструкции RDTSC, я нахожу

RDTSC ключ в целевом-i386/translate.c.And добавить Printf, но я получил nothing.So I

удивительно, если кто-то может дать мне какую-нибудь руководство, чтобы сломать through.Thank вам много ~

ответ

1

После некоторого эксперимента я почти нашел ответ на свой собственный вопрос stion.See кода ниже:

static int handle_rdtsc(struct kvm_vcpu *vcpu) 
{ 
    u64 data; 
    if (vmx_get_msr(vcpu, MSR_IA32_TSC, &data)) { 
    kvm_inject_gp(vcpu, 0); 
    printk("wsh_handle_rdtsc_return\n"); 
    return 1; 
    } 

    vcpu->run->exit_reason = 20; 
    vcpu->arch.regs[VCPU_REGS_RAX] = data & -1u; 
    vcpu->arch.regs[VCPU_REGS_RDX] = (data >> 32) & -1u; 
    skip_emulated_instruction(vcpu); 
    if(vmx_get_cpl(vcpu)>0) 
    { 
     printk("wsh_handle_rdtsc,cpl:%d\n",vmx_get_cpl(vcpu)); 
    } 
    return 1; 
} 

Как вы уже видели выше, я использую vmx_get_cpl фильтровать тот RDTSC vm_exit, вызванный гостевым ядром, и я фактически, printk всегда печати 3, так как уровень privellege гостя Приложения vm всегда 3. Все поправки приветствуются!

+0

Очень приятно - это сработало? вы пытались отладить латентность rdtsc? Я спрашиваю, как я делаю то же самое –

Смежные вопросы