《Linux内核分析》第五周:分析system_call中断处理过程
2024-10-11 20:56:33
实验
分析system_call中断处理过程
- 使用gdb跟踪分析一个系统调用内核函数(您上周选择那一个系统调用),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl ,推荐在实验楼Linux虚拟机环境下完成实验。
- 根据本周所学知识分析系统调用的过程,从system_call开始到iret结束之间的整个过程,并画出简要准确的流程图,撰写一篇署名博客,并在博客文章中注明“真实姓名(与最后申请证书的姓名务必一致) + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ”,博客内容的具体要求如下:
- 题目自拟,内容围绕系统调用system_call的处理过程进行;
- 博客内容中需要仔细分析system_call对应的汇编代码的工作过程,特别注意系统调用返回iret之前的进程调度时机等。
- 总结部分需要阐明自己对“系统调用处理过程”的理解,进一步推广到一般的中断处理过程。
代码
getuid.c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char const *agrv[])
{
uid_t uid;
uid=getuid();
printf("The current user ID:%d\n",uid);
return 0;
}
gdb跟踪分析一个调用函数
进入gdb调试
设置断点
结果
设置断点在
结果:发现执行命令getuid时并没有停下,反而在执行getuid_asm时停下了
单步执行,返回了进程调度中的一个当前进程任务的值。
设置断点于system_call处
发现可停,而继续执行时,刚才停下的getuid_asm也返回了值:
system_call到iret过程流程图
最新文章
- ZK 页面间参数传递
- 如何隐藏DOM元素
- 精品资源:40个实用的 PSD 贴纸模板《下篇》
- Integer与int的种种比较你知道多少?
- linq to entity 获取项的集合总数
- 手机软件mockup设计工具
- WebKit内核分析之Page
- kafka常用操作命令
- 一个快速查看API的汇编和机器码的工具.发布源码
- WebActivatorEx
- nginx Location配置总结(转)
- php本页面调试报错配置
- JAVA多线程之先行发生原则
- Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
- python对象属性管理(2):property管理属性
- Android之Fragment(碎片)方方面面
- 通过全备+binlog_server同步恢复被drop的库或表
- matlab与示波器连接及电脑连接
- 微信小程序开发——小程序分享转发
- Centos PS1