举例跟踪分析Linux内核5.0系统调用处理过程
学号最后三位编号:094
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/
0.实验内容
- 编译内核5.0
- qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
- 选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析
- https://github.com/mengning/menu
- 给出相关关键源代码及实验截图,撰写一篇博客(署真实姓名或学号最后3位编号),并在博客文章中注明“原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ ”
一、编译内核
下载源码:
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/(官方下载慢)
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v5.x/(下载快)
选择linux-5.0.1.tar.xz下载
使用以下两条指令解压
xz -d linux-5.0.1.tar.xz
tar -xvf linux-5.0.1.tar
然后进入解压好的文件夹,进行配置
我没有使用i386的缺省编译;用make menuconfig进行设置,make -j2编译(编译完一共占了24g包括以前的一些东西,我默认设置的是20g空间)
(一定要确保空间够!!!)
(一定要确保空间够!!!)
(一定要确保空间够!!!)
重要的话说三遍
中间遇到的问题大多都是缺依赖,最头疼的是空间不够了,需要扩容,而且之前编译的也白费了
二、准备根文件系统
根据孟老师的文档,执行以下操作
cd Lab2
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu///在这里来修改test.c加入自己学号后两位的系统调用//我的学号是094 对应为fchmod 代码后附
gcc -o init linktable.c menu.c test.c -m32 -static -pthread
cd ../rootfs/
cp ../menu/init ./
find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
制作完成后,如下图
中间出现的问题:
解决方案:
https://blog.csdn.net/qq_32693119/article/details/80535662
三、启动qemu并调试
需要启动x86-64的cpu,所以改为qemu-system-x86_64启动
使用gdb调试
创建main.c,代码来源fchmod百度百科(用qemu交互,找不到函数,符号表需要重新编译内核,时间不够)
编译并执行094
对094进行调试
单步执行,并查看寄存器信息
其中eax中放的是系统调用号94,ebx和ecx中则为传入参数文件描述符和权限
然后进入系统调用:
call *%gs:0x10 系统调用会从这里进入,调用int 0x80,进入内核态,system_call()执行。
四、总结
关于94号系统调用fchmod,其过程为:
1.寄存器eax保存系统调用号94、ebx和ecx保存栈顶参数
2.调用中断指令int 0x80进入内核态
3.执行system_call(),此时根据eax查询系统调用表,找到服务地址,执行服务
4.服务结束后,恢复保存的现场,回到用户态,ret返回结果
转载于:https://www.cnblogs.com/gesiyao/p/10561672.html
举例跟踪分析Linux内核5.0系统调用处理过程相关推荐
- 跟踪分析Linux内核5.0系统调用处理过程
跟踪分析Linux内核5.0系统调用处理过程 学号384 原创作业转载请注明出处+中国科学技术大学孟宁老师的Linux操作系统分析 https://github.com/mengning/linuxk ...
- 分析Linux内核5.0系统调用处理过程
学号: 363 本实验来源 https://github.com/mengning/linuxkernel/ 一.实验要求 1.编译内核5.0 2.qemu -kernel linux-5.0.1/a ...
- linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程
贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...
- 实验三 Linux的启动与关闭,实验三:跟踪分析Linux内核的启动过程
Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核 2 cd ~/LinuxKernel/ 3 wget https://www.kerne ...
- 实验三:跟踪分析Linux内核启动过程
钟晶晶 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.使用qemu ...
- 实验三:跟踪分析Linux内核的启动过程
Ubuntu 16.04下搭建MenuOS的过程: 1.下载内核源代码编译内核 1 # 下载内核源代码编译内核2 cd ~/LinuxKernel/3 wget https://www.kernel. ...
- linux内核分析作业3:跟踪分析Linux内核的启动过程
内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...
- 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源
实验要求: 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客,并在博客文章中注明" ...
- 实验六:分析Linux内核创建一个新进程的过程
20135108 李泽源 阅读理解task_struct数据结构http://codelab.shiyanlou.com/xref/linux-3.18.6/include/linux/sched.h ...
最新文章
- gif透明背景动画_前端基础系列之bmp、jpg、png、gif、svg常用图片格式浅谈(二)...
- win2003禁止web等目录执行exe,bat,com的方法
- c 语言 字符 宏 枚举,从C宏创建字符串列表和枚举列表
- Flex通过Blazeds利用Remoteservice与后台java消息推送
- oracle jinitiator版本太旧,Oracle Jinitiator 版本太旧或过低怎么办
- MySQL为什么用 B+ 树,不用 B 树?
- Vrep 中的运动规划1(主要是基于RRT算法)
- fiq中断的入口地址_FIQ和IRQ区别
- 【转】字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- python和nodejs哪个写爬虫好_PythonNodejs 哪个比较适合写爬虫
- 用结构化思维策划一个会议
- Ureport2报表工具金额格式化
- 触动人心的手机端页面设计
- 台式机局域网电脑通过笔记本的无线网络上网
- oracle编程题考试题,oracle考试题
- 七日年化收益率怎么算「知识普及」
- 解决Spring测试出现@EnableAsync annotation metadata was not injected
- 双目立体视觉简单介绍
- 常用的系统操作响应时间
- 渗透测试实战 - 外网渗透内网穿透(超详细)
热门文章
- 安卓手机控制小车(自己做成功了,有全套资料)
- git相关教程之Gitee和GitLab的使用(总体第三篇)
- 滥用线程,导致线上线程池被撑爆的一次意外
- 学生成绩排名(并列问题)
- 实现HTML页面动态处理
- TL431的应用及应用仿真
- Failed with exception java.io.IOException....FileFormatException: Malforme... Invalid postscript.
- 编程进阶:Java小白的序列化Serializable接口
- 如何建设(访问)本地网站
- input输入长度与限制内容