macOS上的汇编入门(十一)——系统调用

在上一篇文章中,我们更深入地讨论了关于汇编语言函数方面的知识,同时也介绍了如何调用系统库libSystem.dylib的函数。在这篇文章中,我们讨论的是另一种系统提供的函数——系统调用。

什么是系统调用

所谓系统调用(System call), 就是指操作系统提供的接口。我们知道,现代的操作系统分为内核态和用户态。我们平时的汇编语言的执行过程中,都是在用户态执行的。但是,有一些核心的功能,如文件的读写、进程的创建等,都是在内核态实现的。这时候,就需要我们去调用操作系统提供给我们的接口来实现。系统调用和我们之前说的系统库有什么区别呢?其实,很多系统调用在系统库中都有封装。但是,系统调用是最底层的东西。譬如说,我们在织衣服的时候,丝线不够了。我们是不需要自己去养蚕缫丝的,只需要去丝绸店买丝线就行。丝绸店就相当于操作系统,它负责养蚕缫丝,而我们只需要去调用。同时,我们也可以不必自己去丝绸店买衣服,可以去找仆人出门。仆人有什么好处呢?这仆人十分熟悉丝绸店,知道什么丝绸店有什么丝绸店没有。我们想买紫色的丝线,仆人说“丝绸店没有紫色的丝线”,那么也就不需要去丝绸店了。仆人就相当于系统库。我们在调用系统库中涉及系统调用的函数的时候,最终都是要调用到系统调用的。

有哪些系统调用

我们前往/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk 1/usr/include/sys/这个目录,找到一个叫syscall.h的文件。这个文件的格式如下:

#define	SYS_syscall        0
#define	SYS_exit           1
#define	SYS_fork           2
#define	SYS_read           3
#define	SYS_write          4
#define	SYS_open           5
#define	SYS_close          6
#define	SYS_wait4          7

第二列是系统调用的名字,第三列是系统调用号。

系统调用的名字很直白地表述了系统调用的作用,比如说SYS_exit就是退出进程,SYS_fork就是创建进程,SYS_read就是打开文件等等。

系统调用实质上是操作系统提供给我们的一个C函数接口,那么,我们去哪里找系统调用的函数原型呢?

这个相对比较麻烦。首

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值