2019-2020-1 20199323《Linux内核原理与分析》第六周作业

实验

先进入LinuxKernel,删除menu,下载一个新的menu,然后编译menu。

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第1张图片

然后使用gdb跟踪

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第2张图片

运行到sys_time,后输入time可以看到time命令的系统调用

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第3张图片

输入list,可以看到代码

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第4张图片

输入s单步执行,然后输入finish把这个函数执行完

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第5张图片

单步执行,然后return i获得数值

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第6张图片

在system_call处设置断点,然后输入time-asm,还是停在了SYSCALL_DEFINE1,并不能在system_call停下

2019-2020-1 20199323《Linux内核原理与分析》第六周作业_第7张图片

分析

中断指令INT 0x80执行时,系统调用号会被放入 eax 寄存器中,system_call函数可以读取eax寄存器获取,然后将其乘以4,生成偏移地址,在syscall_exit里面判断当前的任务是否##需要处理syscall_exit_work,然后跳转到work_pending,里面有work_notifysig处理信号,然后跳转到restore_all,恢复现场返回系统调用到用户态。

你可能感兴趣的:(2019-2020-1 20199323《Linux内核原理与分析》第六周作业)