Hi Muladi, some times ago someone said me to do something like this: /****************************************************/ a piece of code handling interrupt in translate.c: case 0xcd: /* int N */ val = ldub_code(s->pc++); /* asia: start */ if (val == 0x80){ gen_op_handle_syscall(); break; } if (s->vm86 && s->iopl != 3) { gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); } else { gen_interrupt(s, val, pc_start - s->cs_base, s->pc - s->cs_base); } break; /*********************************************************/ I can't understand why I have to intercept the case 0xcd. Can you explain me? I've tried to intercept sysenter (0x134) and sysexit (0x135) events, but I had no information about syscall from it. Thanks for help, Antonio 2009/2/7 Mulyadi Santosa > Hi > > On Sat, Feb 7, 2009 at 8:15 PM, Antonio Ricci > wrote: > > Hi all, > > i'd want to understand how Qemu handles system calls while executing both > > Linux and Windows operating system. I've searched on the web with no > > results. > > Do you know if there is some documentation about syscall handling in > Qemu? > > Thanks in advance for help > > I assume you ask about full system emulation. Try to check how Qemu > intercept int 80h or SYSENTER/SYSCALL instruction (if the guest OS is > Linux). Not sure what Windows does when doing system call, maybe by > executing int instruction toward certain vectors too. > > As usual, related interrupt handler will be executed (and translated). > So from Qemu point of view, it's strictly a matter of intercepting > code and translating it. It's the guest OS that does the real work on > syscall handling. > > In user space emulation only, system call is intercepted by the normal > dynamic code translation, but syscall is handled by syscall() C > function. The complication could arise if the guest OS is not the same > type as the host OS. Some "interpretations" are needed here. > > regards, > > Mulyadi. > > >