[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Question related to Single-step execution and Emulation


  • To: abhinavs_iitkgp@xxxxxxxxxxx
  • From: "Grzegorz Miłoś" <gm281@xxxxxxxxx>
  • Date: Tue, 24 Jun 2008 20:11:01 +0100
  • Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Tue, 24 Jun 2008 12:11:47 -0700
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references:x-google-sender-auth; b=dudHE2uNlH0vsHFfiw3rFgmuON02yeyWgJNBZWGdw7PTrdot3BbX4umpFLkuexdgHQ 9MRHXFYEMWlzKtZrRtMbgbQWz+zA/xPtpiOj795m2RxfUGNWJm+aIwaJ4hm/xCD+ndla GndVop0JNmJSR3E+kZbSJ8mEQCHiSdZ8D7hEU=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Assuming that you have an AMD CPU (I'm sure you can figure out how to
achieve the same thing with an Intel CPU) make sure that you have
TRAP_no_device bit set in v->arch.hvm_svm.vmcb->exception_intercepts
(as per svm_do_resume with a debugger attached).
After that, you should get VMEXIT_EXCEPTION_DB in svm_vmexit_handler.

Cheers
Gr(z)egor(z)

On Tue, Jun 24, 2008 at 6:42 PM, Abhinav Srivastava
<abhinavs_iitkgp@xxxxxxxxxxx> wrote:
>
> Hi Grzegorz,
>
> I am working with HVM domain. Also, I forgot to mention in my previous email 
> that I am setting debug register DR0 using set_debugreg with the value of 
> next instruction so that I could trap on that. The way I am setting debug 
> register with the next instruction value is
>
> next-eip = regs->eip + __get_instruction_length().
>
> Still, I am not seeing it working.
>
> Thanks,
> Abhinav
>
> --- On Tue, 24/6/08, Grzegorz Miłoś <gm281@xxxxxxxxx> wrote:
>
>> From: Grzegorz Miłoś <gm281@xxxxxxxxx>
>> Subject: Re: [Xen-devel] Question related to Single-step execution and 
>> Emulation
>> To: abhinavs_iitkgp@xxxxxxxxxxx
>> Cc: "xen-devel" <xen-devel@xxxxxxxxxxxxxxxxxxx>
>> Date: Tuesday, 24 June, 2008, 2:51 PM
>> Are you working with an HVM or PV domain?
>> Gr(z)egor(z)
>>
>> >
>> > Hi all,
>> >
>> >
>> > I am trying to perform single-stepping and instruction
>> emulation both in Xen-3.2.1. I am using the following
>> approach:
>> >
>> > First, I mark a guest page "not present"
>> inside the shadow page table so that I could intercept any
>> operation that involves this page. When the guest tries to
>> access that page, it faults and control goes to Xen
>> (sh_page_fault function). There, I emulate that operation
>> and return the control to guest to execute next
>> instruction. I could get my first part working.
>> >
>> > In the second part after emulating the instruction
>> inside Xen, I want to perform single-step execution from
>> next instruction onwards so that I could monitor further
>> execution of guest from that point.
>> >
>> > To achieve that I did following: After emulating an
>> instruction inside Xen and before sending the control back
>> to guest OS, I set the EFLAGS's trap bit set by doing
>> following operation:
>> >
>> > regs->eflag |= X86_EFLAGS_TF
>> >
>> > And return the control from sh_page_fault function by
>> saying "return EFAULT_FIXED".
>> >
>> > My understanding is that with this flag set when guest
>> completes the execution of the next instruction, it traps to
>> Xen with exit reason TRAP_debug and do_debug handler should
>> be invoked inside x86/traps.c. From there, again I set
>> X86_EFLAGS_TF flag to get guest trapped for next
>> instruction and so on. When i want it to be end I will set
>> X86_EFLAGS_RF flag.
>> >
>> > However, when I perform above-mentioned procedure I
>> get to see a message "Trace/breakpoint trap" in
>> my guest OS only once and my do_debug or
>> (debugger_trap_entry method with vector = Trap_debug) does
>> not get invoked at all inside Xen. Since trap is not coming
>> into Xen, I am not able to get the control after execution
>> of instructions.
>> >
>> > It seems like with my above-described method, I am
>> injecting TRAP_debug exception for the instruction that I
>> emulate inside the Xen. And, eflag is not set in the
>> context of next instruction that will be executed inside
>> the guest, which should trap with debug exception.
>>
>> >
>> >
>> > It would be great if someone could explain me what i
>> am doing wrong here and if yes what would be the right
>> approach to perform single-step execution in Xen.
>> >
>> >
>> > Thanks in advance.
>> >
>> > Regards,
>> > Abhinav
>> >
>> >
>> >
>> >      Explore your hobbies and interests. Go to
>> http://in.promos.yahoo.com/groups/
>> >
>> > _______________________________________________
>> > Xen-devel mailing list
>> > Xen-devel@xxxxxxxxxxxxxxxxxxx
>> > http://lists.xensource.com/xen-devel
>> >
>
>
>      Unlimited freedom, unlimited storage. Get it now, on 
> http://help.yahoo.com/l/in/yahoo/mail/yahoomail/tools/tools-08.html/
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.