作者:王鹤楼
原创作品转载请注明出处 《Linux内核分析》MOOC课程
http://mooc.study.163.com/course/USTC-1000029000
在上周的课程中我使用的系统调用是alarm.
实验过程:
进入到/home/shiyanlou/LinuxKernel/linux-3.18.6目录,删除原来的menu
rm menu -rf
从github上更新最新的menu代码:
git clone https://github.com/mengning/menu.git
修test.c添加相关代码:
make rootfs执行:
用gdb调试:
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
打开另一个shell窗口,,执行:
gdb //打开gdb调试
file linux-3.18.6/vmlinux //加载符号表
target remote:1234 //连接端口
b sys_alarm //设置断点
c //执行
l //打印断点处代码
总结:
alarm函数对应的系统调用为sys_alarm,设置断时就是b sys_alarm
命令。内核执行系统调用时首先运行宏SAVE_ALL保存寄存器信息,退出系统调用用是执行iret汇编指令。