如何进入系统调用

要想进入系统调用,一般通过c库函数。函数通过软中断号0x80从用户态进入内核态,调用相应的中断处理程序,通过传递的参数在内核态运行中断代码。

通常系统调用靠c库支持。用户程序通过包含标准头文件并和c库链接,就可以使用系统调用。但是如果是自己在底层实现的系统调用,可能c库并不支持,很庆幸,linux本身提供了一组宏,用于直接对系统调用进行访问。它会设置好寄存器并调用陷入命令。这些宏就是_syscalln(),其中n的范围从0到6,代表需要传递给系统调用的参数个数,这事因为该宏必须了解有多少参数按照什么次序压入寄存器。举个open系统调用的例子,c库已经实现了open函数,我们这里自己实现open系统调用函数。

open函数的系统调用定义是: long open(const char* filename, int flags, int mode);

我们自己用_syscalln()实现为:
#define NR_open 5
_syscall3(long, open, const char*, filename, int, flags, int, mode)

int main(){
int fd = open("filename", flags, mode);
close(fd);
return 0;
}

这里我们没有实现close,所以调用了c库的,但是调用了自己实现的open函数。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值