<>OS实验2-5 课堂练习2.3:系统调用

<>第1关:版本1内核执行的前 3 个系统调用

<>本关任务:

<>解题过程:

<>1.跟踪到系统调用发生

系统调用的总控函数是 system_call ,只要在这里设断点,即可捕获系统调用的发生

<>2.查找系统调用的编号与名字

系统调用发生时系统调用号存放在寄存器 eax 中,编号与名字对应关系可在文件unistd.h中查到

在地址 0x7780 这里会调用系统调用的实现函数,故执行完毕0x7780处指令后会进入具体的系统调用函数

可直接在0x7780处设置断点,同时设置命令查看eax寄存器及进入具体调用函数

注意:答案中系统调用名字不加下划线前缀:即sys_fork在填写时应写为fork

<>第2关:命令 ls 执行的系统调用

<>本关任务:

<>解题过程:

<>1.跟踪到ls命令发生

在do_execve函数处设置断点

同时设置命令,显示当前执行文件名

一直continue到虚拟机等待输入为止

此时虚拟机输入ls命令执行

<>2.查找ls执行的系统调用编号与名字

在系统调用函数处设置断点,同时设置命令展示寄存器中编号值,以及调用函数查看对应函数名

注意:在exit函数后,current->pid发生改变,之后函数已不再是6号进程ls调用

<>补充知识

* do_execve函数负责可执行程序的加载和运行
* sys_call_table为系统调用表,系统调用程序system_call会查找系统调用表以获得系统调用号对应的系统调用,并执行

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:766591547
关注微信