mit 6.1810--2.system calls

system calls

gdb

1
2
> b syscall
> backtrace

发现是 usertrap() 调用了 syscall()

翻阅 user/initcode.S 后发现 p->trapframe->a7 是用来存放系统调用号,此时这个值为 0x7,也就是 SYS_exec

打印特权寄存器 $sstatus=0x200000022,说明之前处于用户态

System call tracing

要求你在内核态实现 trace 命令,格式:

1
trace [argument] [command]

输出 [command] 从开始到执行结束过程中的 syscall