姬梦馨
原创博客
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
使用gdb跟踪分析一个系统调用内核函数
1:克隆并自动编译MenuOS
a .强制删除menu (rm menu -rf)
b. 更新menu代码至最新版本(git clone https://github.com/mengning/menu.git)
c.rm menu -rf 强制删除原menu文件
d. make rootfs 运行自动编译脚本,生成根文件系统,启动MenuOS
2. 给MenuOS增加命令
test.c中main函数里: 增加MenuConfig
make rootfs
3:增加函数
int Getegid(int argc,char *argv[]) {
gid_t gid;
gid = getegid ();
printf(“gid=%d”,gid);
return 0; }
int GetegidAsm(int agrc,char *argv[]) { gid_t gid; gid = getegid (); asm volatile( “mov $0x32,%%eax\n\t” “int $0x80\n\t” “mov %%eax,%0\n\t” :”=m”(gid) );
printf(“gid=%d”,gid);
return 0;
}
4. make roots 发现新增的命令或者 可以输入Help 查看当前的系统调用
5:使用GDB 进行内核跟踪
分析从system_call开始到iret结束之间的整个过程
总结
讲的是如何给内核添加新的系统调用命令,并用gdb进行跟踪调试,做了实践后对实验更加理解了, 而且自己画了流程图,又整理总结了思路。