举例跟踪linux内核系统调用
学号351+ 原创作品转载请注明出处 + 中科大孟宁老师的linux操作系统分析: https://github.com/mengning/linuxkernel/
实验要求:
- 编译内核5.0 qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
- 选择系统调用号后两位与您的学号后两位相同的系统调用进行跟踪分析 https://github.com/mengning/menu
- 给出相关关键源代码及实验截图,撰写一篇博客,博客内容的具体要求如下:
- 题目自拟,内容围绕系统调用进行;
- 博客中需要使用实验截图
- 博客内容中需要仔细分析系统调用、保护现场与恢复现场、系统调用号及参数传递过程
- 总结部分需要阐明自己对系统调用工作机制的理解。
实验内容
一、编译内核5.0.1
1,下载内核5.0.1内核代码,配置编译Linux内核,使之携带调试信息
内核下载地址https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
使用指令如下
cd ~/Lkernel/
wget https://mirrors.edge.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
cd linux-5.0.1
make i386_defconfig
make -j4
遇到的问题如下

解决方法

这个时候又会出现

解决方法

继续执行make j4

直到编译结束。
2,制作根文件系统
指令如下:
cd ..
mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
sudo apt install gcc-multilib
gcc -pthread -o init linktable.c menu.c test.c -m32 -static
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc | gzip -9 > ../rootfs.img
3,启动Menu os
cd ~/Lkernel/
qemu -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img
4,跟踪调试内核
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img -S -s -append nokaslr
然后开启另外一个窗口,进入Lkernel
cd linux-5.0.1
gdb vmlinux
target remote:1234 #建立与qemu调试端口的attach
调试过程可以通过gdb内置的c指令开始,

二、跟踪系统调用
1,选择学号后两位的系统调用(学号351):

acct系统调用可用于启动/禁止进程信息记录功能。
#include <sys/acct.h>
int acct(char *filename); 成功则返回0,出错返回-1,,错误类型在errno中。
2,编写test.c

运行该函数:

运行结果如图:

当前进程正常终止,并将信息写入指定的acct.txt

使用gdb断点,分析系统调用
break acct //设置断点
r //运行到断点
ni //单步调试
disass //显示步骤详情
info r //显示运行时寄存器详情



如图,当运行到syscall步骤之后,rax的值发生了变化,显示acct()函数返回值是0,打印结束后返回到main函数
三、实验分析总结
int 0x80是是一个系统中断,操作系统对于中断处理流程一般为:
1.关中断:CPU关闭中段响应,即不再接受其它外部中断请求
2.保存断点:将发生中断处的指令地址压入堆栈,以使中断处理完后能正确地返回。
3.识别中断源:CPU识别中断的来源,确定中断类型号,从而找到相应的中断服务程序的入口地址。
4.保护现场所:将发生中断处理有关寄存器(中断服务程序中要使用的寄存器)以及标志寄存器的内存压入堆栈。
5.执行中断服务程序:转到中断服务程序入口开始执行,可在适当时刻重新开放中断,以便允许响应较高优先级的外部中断。
6.恢复现场并返回:把“保护现场”时压入堆栈的信息弹回原寄存器,然后执行中断返回指令(IRET),从而返回主程序继续运行。
前3项通常由处理中断的硬件电路完成,后3项通常由软件(中断服务程序)完成。

系统调用中断处理流程
举例跟踪linux内核系统调用的更多相关文章
- Linux内核-系统调用
Linux内核-系统调用 1.与内核通信 #系统调用在用户空间进程和硬件设备之间添加了一个中间层 作用:1.为用户空间提供了一种硬件的抽象接口 2.系统调用保证了系统的稳定和安全 3.出于每一个进程都 ...
- 通过gdb跟踪Linux内核装载和启动可执行程序过程
作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的:通过对一个简单的可执 ...
- 使用gdb跟踪Linux内核启动过程(从start_kernel到init进程启动)
本次实验过程如下: 1. 运行MenuOS系统 在实验楼的虚拟机环境里,打击打开shell,使用下面的命令 cd LinuxKernel/ qemu -kernel linux-/arch/x86/b ...
- Linux内核系统调用处理过程
原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 学号末三位:168 下载并编译Linux5.0 xz -d linux-.tar.xz . ...
- Linux内核系统调用列表
一.进程控制: fork 创建一个新进程 clone 按指定条件创建子进程 execve 运行可执行文件 exit 中止进程 _exit 立即中止当前进程 getdtablesize 进程所能打开的最 ...
- linux内核系统调用--sendfile函数
在apache,nginx,lighttpd等webserver其中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile究竟是什么呢?它 ...
- linux内核系统调用和标准C库函数的关系分析
http://blog.csdn.net/skyflying2012/article/details/10044343
- LInux内核分析--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
实验者:江军 ID:fuchen1994 实验描述: 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3 ...
- Linux内核分析学习总结
20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这学期开 ...
随机推荐
- 对Activity的DecorView的包装(二)
看了下公司的系统代码对于根布局decor_layout.xml的修改, 有所获. 前些时候才开始做系统开发的时候, 总想改改系统的源码, 至于原因: 人总是想装装, 在踩过几个别人修改的坑后, 还是觉 ...
- Python模块 3
time模块 在计算中时间共有三种方式: 1.时间戳: 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是flo ...
- 20175312 2018-2019-2 《Java程序设计》第6周学习总结
20175312 2018-2019-2 <Java程序设计>第6周学习总结 教材学习内容总结 已依照蓝墨云班课的要求完成了第七.十章的学习,主要的学习渠道是PPT,和书的课后习题. 总结 ...
- Maven下载与环境变量配置
前言: Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK.如果还未安装 JDK,可以参考Win10下JDK下载与环境变量配置. 项目 要求 JDK Maven 3.3+ ...
- Git仓库删除大文件
Git仓库删除大文件 背景 当用Git久了,难免会手误或临时添加一些大文件到仓库中,即使以后添加进了.gitignore,甚至做了git rm,但是Git为了保证版本可回退,history pack里 ...
- unity - ios打包真机测试及模拟器测试
本文介绍unity游戏如何在iphone机和ios模拟器上进行测试打包 准备工作:mac电脑一台.iphone一部.连接mac和iPhone的数据线.unity.Xcode.苹果开发者账号. 苹果开发 ...
- [转载] 修改linux终端用户名的颜色
此文章为转载,来源:https://blog.csdn.net/vactivx/article/details/62219349,目的是怕以后他博客打不开,文章就没了.存个档. 这个基本都需要手动修改 ...
- Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted
一.问题原因: 根本原因是从Android9.0开始,出于完全因素考虑,默认不再支持http网络请求,需要使用 https. 二.解决方案: 解决的基本思路是:对指定的网址进行过滤,强制允许指定网址继 ...
- 显示等待 (web自动化测试)
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from sel ...
- PHP常用工具类
<?php namespace isslib\Util; use think\Config; /** * 常用工具类 * User: xaxiong * Date: 2016/12/19 * T ...