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

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

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

本关任务:

OS实验2-5 课堂练习2.3:系统调用_第1张图片

解题过程:

1.跟踪到系统调用发生

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

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

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

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

OS实验2-5 课堂练习2.3:系统调用_第2张图片可直接在0x7780处设置断点,同时设置命令查看eax寄存器及进入具体调用函数

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

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

本关任务:

OS实验2-5 课堂练习2.3:系统调用_第3张图片

解题过程:

1.跟踪到ls命令发生

在do_execve函数处设置断点

OS实验2-5 课堂练习2.3:系统调用_第4张图片同时设置命令,显示当前执行文件名

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

OS实验2-5 课堂练习2.3:系统调用_第5张图片此时虚拟机输入ls命令执行

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

OS实验2-5 课堂练习2.3:系统调用_第6张图片在系统调用函数处设置断点,同时设置命令展示寄存器中编号值,以及调用函数查看对应函数名

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

补充知识

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

你可能感兴趣的:(Educoder操作系统实验,linux)