IO指令模拟流程(1)

来源:互联网 发布:天津摩卡软件 编辑:程序博客网 时间:2024/05/16 08:53

1       以写指令为例

e6 70 66 9c 66 9d是一条写指令,以它为例来讲解一下IO指令模拟流程。

 

vmx_vmexit_handlerhandle_mmio

指令由虚拟机下发,由xen收到进行处理。

asmlinkage void vmx_vmexit_handler(struct cpu_user_regs *regs)

{

    switch ( exit_reason )

{

    case EXIT_REASON_IO_INSTRUCTION:

        if ( !handle_mmio() )

            vmx_inject_hw_exception(TRAP_gp_fault, 0);

        break;

 

hvm_emulate_preparevcpu的上下文信息,为指令模拟做准备;

handle_mmiohvm_emulate_one

hvm_emulate_one来进行指令模拟的动作。

int handle_mmio(void)

{

    struct hvm_emulate_ctxt ctxt;

    struct vcpu *curr = current;

    int rc;

 

    hvm_emulate_prepare(&ctxt, guest_cpu_user_regs());

 

    rc = hvm_emulate_one(&ctxt);