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

实验

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

然后使用gdb跟踪

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

输入list,可以看到代码

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

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

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

分析

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

posted @ 2019-10-26 11:50  20199323王德胜  阅读(131)  评论(0编辑  收藏  举报