2023-2024-1 20232806《Linux内核原理及分析》第五周作业

实验四:使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用

一、实验要求

1.选择一个系统调用(13 号系统调用 time 除外),系统调用列表参见 torvalds/linux。
2.参考视频中的方式使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用。

二、实验过程

1.基础知识
Linux整体架构图如下
在这里插入图片描述
1)系统调用:组成了用户态跟内核态交互的基本接口。
2)库函数:它对系统调用进行封装,提供简单的基本接口给用户,增强了程序的灵活性。
3)Shell:命令行。方便用户和系统交互,呈现给用户交互窗口。
4)用户态:处于低的执行级别,代码能够掌控的范围会受到限制,不能使用特权指令。
5)内核态:处于高的执行级别,可以访问任意的物理内存,可以执行特权指令。
2.实验过程
打开实验楼的shell环境
在这里插入图片描述
在这里插入图片描述
编译并运行
在这里插入图片描述
编写如下汇编C代码
在这里插入图片描述
编译+运行
在这里插入图片描述
3.实验原理
在这里插入图片描述

三、实验总结

系统调用是用户态进程访问硬件的一种方式,它通过中断(int 0x80)由用户态进入内核态。当一个用户态程序进行系统调用的时候,CPU进入内核态并执行内核函数。
系统调用的过程为:函数库提供的封装函数接口(API)->system_call(是所有系统调用的入口),这个入口会根据系统调用号(eax入栈),调用对应的系统调用例程。系统调用最多使用6个寄存器(ebx,ecx,edx,esi,edi,ebp)作为参数,如果超过6个参数,寄存器中将会保存一个指向内核态可以操作的一块的内存,参数保存在内存上面。本次实验,我学习了Linux系统调用的使用方法,对于系统调用过程有了更深刻的了解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20232806安星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值