[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Question related to Single-step execution and Emulation
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |