syscall

General discussion about Visopsys. We'll create more specific forums if the number of posts justifies that.
Post Reply
tangruidon
Posts: 1
Joined: Sat Aug 11, 2012 1:42 am

syscall

Post by tangruidon » Sat Aug 11, 2012 2:24 am

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

User avatar
andymc
Posts: 560
Joined: Tue Nov 16, 2010 7:20 pm

Re: syscall

Post by andymc » Mon Aug 13, 2012 3:00 am

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.

Andy

Post Reply