一、系统调用实验:
1.实验的相关知识准备:
(1)系统调用的三层皮:xyz()(API)、system_call(所有系统调用的入口) 、 sys_xyz()(中断服务程序)
(2)API是程序员在用户空间下可以直接使用的函数接口,它提供了一套封装例程,将系统调用在用户空间包装后供用户编程使用。涉及到与内核空间进行交互的API会封装系统调用,而不涉及与内核进行交互的API不会封装系统调用。
(3)系统调用是用户进入内核的接口,并非内核函数。用户程序通过某个系统调用进入内核后,会接着去执行这个系统调用对应的内核函数。这个内核函数 sys_xyz() 称为系统调用的服务例程。
(4)系统调用号将 xyz() 与 sys_xyz() 关联起,系统调用号由 eax 寄存器传递。
2.系统调用的两种实现方法:
本实验我选择的是系统调用号为 38 的 sys_rename(),功能实现设计为将hello.c 文件重新命名 newhello.c
(1)库函数API实现:

运行结果如下:


(2)嵌入汇编代码实现:

本文详细介绍了Linux系统调用的实验,包括API和嵌入汇编的实现方式,分析了系统调用的过程,以及遇到的问题与解决方法。实验中通过sys_rename系统调用实现了文件重命名,探讨了如何在glibc未封装新系统调用时直接调用内核函数。
最低0.47元/天 解锁文章
8772

被折叠的 条评论
为什么被折叠?



