系统调用的过程

1.用户层可调用的系统调用接口函数中内嵌了一段汇编代码,调用了0x80号中断,并将一些参数保存在eax等寄存器中
2.CPU去IDT表格中查找0x80号中断对应的中断处理程序system_call(硬件行为),system_all所在的内存段的CPL置为0,而DPL置为3
3.CPU检查当前代码段的CPL和system_call的DPL,由于当前代码段CPL=3且system_call的DPL也特意被设置为了3,所以可以调用。
4.在系统调用函数system_call中,先从eax寄存器中获取到了系统调用号,然后去_system_call_table中查到该调用号对应程序的指令位置,如sys_write函数。同样的这里获取到的也是一个代码段,使用call指令执行。
5.CPU再检查CPL和DPL,由于system_call所在段的CPL为0,所以肯定可以访问。
6.CPU跳转到具体的系统调用程序中执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值