API和系统调用

API->封装例程->系统调用->系统调用处理程序->服务例程

 有一张很有名的图:

总结起来就是:

系统调用xxx,对应的服务例程名sys_xxx。

write()对应汇编:

mov 调用号,eax;

mov  fd,ebx;

mov buf,ecx;

mov count,edx;

int 0x80h


由上可以看出:

1.系统调用可以通过0x80h进行软中断。

   0x80叫做系统调用号,其他中断号用户进程是调用不了的。

2.传递参数:可以通过寄存器传递。

 

这个为什么叫软中断,而不叫陷阱?

syscenter命令也可以进入内核态,但是这个命令是在penium II之上的cpu才有这个命令,所以我的没有这个命令,就不讨论这个了。

数据结构:

sys_call_table[256];

  每一个数组里面放的是服务例程的入口地址,我猜测是4字节的虚拟地址。

int $0x80执行过程:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值