Mac操作系统XNU内核(九)系统调用过程代码某些细节:系统调用BSD和mach
2015-04-03 15:02
218 查看
众所周知,BSD系统调用号,都是正值;mach系统调用号,都是负值。
在这里判断(汇编代码osfmk/x86_64/idt64.s):
指令test1判断寄存器EAX的值,如果正,就继续执行到hndl_unix_scall;如果负,就跳到hndl_mach_scall。
说明:上述逻辑仅限于32位时,64位有其他逻辑(在上一篇中)
在这里判断(汇编代码osfmk/x86_64/idt64.s):
/* Syscall dispatch routines! */ /* * * 32bit Tasks * System call entries via INTR_GATE or sysenter: * * r15 x86_saved_state32_t * rsp kernel stack * * both rsp and r15 are 16-byte aligned * interrupts disabled * direction flag cleared */ Entry(hndl_sysenter) /* * We can be here either for a mach syscall or a unix syscall, * as indicated by the sign of the code: */ movl R32_EAX(%r15),%eax testl %eax,%eax js EXT(hndl_mach_scall) /* < 0 => mach */ /* > 0 => unix */
指令test1判断寄存器EAX的值,如果正,就继续执行到hndl_unix_scall;如果负,就跳到hndl_mach_scall。
说明:上述逻辑仅限于32位时,64位有其他逻辑(在上一篇中)
相关文章推荐
- Mac操作系统XNU内核(八)系统调用过程代码简单分析
- Mac内核XNU的Mach子系统的一个完整过程的代码跟踪
- XNU内核案例(一)BSD系统调用fork的详细分析
- Mac操作系统XNU内核(二)系统调用
- linux内核学习(4)_库函数API和C代码嵌入汇运用用系统调用
- 汇编代码分析----函数的调用堆栈过程(进程内核栈的切换过程)
- Linux内核分析:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- Mac操作系统XNU内核(六)Mach Ports
- fork和exec系统调用在内核中的执行过程
- 一次read()系统调用在内核中的处理过程
- linux修改内核、添加系统调用过程
- FreeBSD 5内核源代码分析之系统调用过程
- 【Linux】Linux添加系统调用以及内核编译过程
- 在代码中调用执行存储过程的方式
- 调用Shell接口(系统运行窗口)的代码
- 系统调用及参数传递过程!
- 修改Linux内核增加系统调用
- 对调用了TypeMock.net的代码进行调试遇到的怪问题--在vs.net中启动resharper自带的unit test的过程和方式是什么样的?
- javascript如何调用C#后代码中的过程
- zz修改Linux内核增加系统调用