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

  • Post author:
  • Post category:其他




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调用



补充知识

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



版权声明:本文为weixin_67752743原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。