Mac操作系统XNU内核(九)系统调用过程代码某些细节:系统调用BSD和mach

 

众所周知,BSD系统调用号,都是正值;mach系统调用号,都是负值。

在这里判断(汇编代码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位有其他逻辑(在上一篇中)

 

转载于:https://www.cnblogs.com/andypeker/p/4390093.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值