实验四:使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用
1.相关知识
系统调用的库函数就是读者使用的操作系统提供的API(应用程序编程接口),API只是函数定义。系统调用是通过软中断向内核发出了中断请求,int指令的执行就会触发一个中断请求。lib函数库定义的一些API内部使用了系统调用的封装例程,其主要目的是发布系统调用,使程序员在写代码时不需要用汇编指令和寄存器传递参数来触发系统调用。一般每个系统调用对应一个系统调用的封装例程,函数库再用这些封装例程定义出给程序员调用的API,这样把系统调用最终封装成方便程序员使用的函数。
内嵌汇编,也称为嵌入式汇编,即在C代码中嵌入汇编的做法,在分析内核时会看到有些就是嵌入式的汇编代码。
2.使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用
a.使用库函数API触发rename系统调用
C语言调用rename系统调用
运行结果如下:
b,嵌入式汇编语言调用rename系统
运行结果如下:
3,实验总结
系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口。当用户进程需要发生系统调用时,CPU 通过软中断切换到内核态开始执行内核系统调用函数。Linux 下发生系统调用的方法有三种,API方式,C代码中嵌入式汇编语言,和库函数syscall。本次实验简要了解了其中的两种,API和C代码中嵌入式汇编语言。