Page 1 of 1


Posted: Sat Aug 11, 2012 2:24 am
by tangruidon
in linux ,it is
int 0x80
in visopsys it may be
lcall $0x003B,$0x00000000 and it will go to $0x003B,$0x00000000
and what is it in $0x003B,$0x00000000

Re: syscall

Posted: Mon Aug 13, 2012 3:00 am
by andymc
Hi tangruidon,

For Visopsys syscalls, we use something called a call gate. In kernelDescriptor.c, you can see that a call gate descriptor is set up to point to the function kernelApi() (in kernelApi.c). When a far call - lcall - is done to the call gate descriptor (in this case 0x3B, offset 0), it causes a privilege level switch into kernel mode code and jumps to the kernelApi() function. The kernel call proceeds from there, and then a far return gets you back to user mode.

0x3B in this case is a selector for the call gate descriptor, not a memory address, in case that wasn't clear.