lab4:以time/gettimeofday系统调用为例分析ARM64 Linux 5.4.34

news2025/1/12 0:54:27

一、ARM64 Linux系统调用过程

(1)svc指令触发系统调用。
(2)保存现场(el0_sync处的内核汇编代码保存异常发生时程序的执行现场),然后根据异常发生的原因(ESR_EL1寄存器)跳转到el0_svc,el0_svc处。
(3)执行系统调用内核处理函数sys_syz()。
(4)系统调用内核处理函数执行完成后,系统调用返回前,需要恢复异常发生时程序的执行现场(恢复现场),包括主动设置ELR_EL1和SPSR_EL1的值:是异常会发生嵌套,一旦发生异常嵌套ELR_EL1和SPSR_EL1的值就会随之发生改变,所以当系统调用返回时,需要恢复之前保存的ELR_EL1和SPSR_EL1的值。
(5)内核调用异常返回指令eret,CPU自动把ELR_EL1写回PC,把SPSR_EL1写回PSTATE,并返回到用户态程序里,继续运行程序。

二、用qemu搭建arm64实验环境

制作根文件系统、并打包–>配置内核,将架构调成arm64,并用arm64的交叉编译工具进行内核的编译–>用qemu启动内核

三、构造代码使用内嵌汇编触发 time/gettimeofday 系统调用

test.c如下

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
 
int main()
{
      time_t tt;
      struct timeval tv;
      struct tm *t;
#if 0
      gettimeofday(&tv,NULL); // 使用库函数的方式触发系统调用
#else
      asm volatile( // 使用内嵌汇编的方式触发系统调用
          "add   x0, x29, 16\n\t"  //X0寄存器用于传递参数&tv
          "mov   x1, #0x0\n\t"     //X1寄存器用于传递参数NULL
          "mov   x8, #0xa9\n\t"   //使用X8传递系统调用号169
          "svc   #0x0\n\t"            //触发系统调用
      );
#endif
      tt = tv.tv_sec;                    //tv是保存获取时间结果的结构体
      t = localtime(&tt);                //将世纪秒转换成对应的年月日时分秒
      printf("time: %d/%d/%d %d:%d:%d\n",
             t->tm_year + 1900,
             t->tm_mon,
             t->tm_mday,
             t->tm_hour,
             t->tm_min,
             t->tm_sec);
      return 0;
}

静态编译一下:

aarch64-linux-gnu-gcc -o test test.c -static

在test.c中打断点调试:
在这里插入图片描述

四、分析系统调用的执行过程

ARM64 架构的 CPU 中,Linux 系统调用(同步异常)和其他异常的处理过程大致相同。异常发生时:
CPU 首先把异常的原因放在 ESR_EL1 寄存器里;
1、把当前的处理器状态(PSTATE)放入 SPSR_EL1 寄存器里;
2、把当前程序指针寄存器 PC 的值存入 ELR_EL1 寄存器里(保存断点),然后 CPU 3、通过异常向量表(vectors)基地址和异常的类型计算出异常处理程序的入口地址,即 4、VBAR_EL1 寄存器加上偏移量取得异常处理的入口地址;
接着开始执行异常处理入口的第一行代码。这一过程是 CPU 硬件自动完成的,不需要程序干预。
5、随后保存异常发生时程序的执行现场(保存现场,即用户栈、通用寄存器等),然后根据异常发生的原因(ESR_EL1 寄存器中的内容)跳转到 el0_svc,el0_svc 调用 el0_svc_handler、el0_svc_common 函数,将 X8 寄存器(regs->regs[8])中存放的系统调用号传递给 invoke_syscall 函数。
6、系统调用内核处理函数执行完成后,会将系统调用的返回值存放在 X0 寄存器中。
7、系统调用返回前,需要恢复异常发生时程序的执行现场(恢复现场),其中就包括恢复 ELR_EL1 和 SPSR_EL1 的值。最后内核调用异常返回指令 eret,CPU 硬件把 ELR_EL1 写回 PC,把 SPSR_EL1 写回 PSTATE,返回用户态继续执行用户态程序。如下图所示,该部分操作由 ret_to_user 函数中的 kernel_exit 0 完成。
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/558399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“不务正业”的奶茶店三个月实现30+万收入

今天我和大家分享一个 我身边的案例。 我有一个朋友 和我分享他朋友的 一个奶茶店 互联网商城的故事。 19年李某开了一家 奶茶店&#xff0c;同时呢 自己在平台做了一个 线上购买奶茶的商城 他是怎么做的呢&#xff1f; 原来每次有客户来到店 购买奶茶的时候。 他会和客户说 扫…

BetaFlight Mark4 H7 Dual270 + BN880 + CRSF 配置存档

BetaFlight Mark4 H7 Dual270 BN880 CRSF 配置存档 1. 源由2. 配置2.1 端口2.2 系统2.3 对齐2.4 GPS2.5 救援2.6 PID2.7 Rate2.8 滤波2.9 接收器2.10 模式2.11 电机 3.差异4. 整机效果5. 飞行效果6. 参考资料 1. 源由 手头这台航模四轴&#xff0c;基本调试的差不多&#xf…

【数据分析之道-Numpy(八)】numpy统计函数

文章目录 专栏导读1、np.mean()2、np.median()3、np.std()4、np.var()5、np.min()6、np.max()7、np.sum()8、np.prod()9、np.percentile()10、np.any()11、np.all() 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领…

Qt QGenericPlugin插件使用案例

问题描述: Qt插件的编写,有两种方式,一种是直接通过自定义接口类Interface来实现,一种是通过QtCreator自带的插件模板来创建。 这里我们先来实现第二种。 功能为点击主界面的按钮,显示插件界面。(插件和开发库一样,什么都可以放进去,只不过就是封装成方便调用的模块…

Vue|非单文件组件

传统网页一些不可避免的小问题: 1.网页JS、CSS等资源依赖关系混乱,不方便维护 2.代码复用率很低 使用组件将代码进行复用,简化项目结构,提高运行效率,便于维护 组件定义传统网页组件 传统代码实现步骤 组件代码定义组件注册组件局部注册全局注册 使用组件避坑 组件定义 组件即为…

聊聊如何利用spring插件来实现策略模式

前言 偶然的机会发现spring有个spring-plugin&#xff0c;官网对它的介绍是 Spring Plugin provides a more pragmatic approach to plugin development by providing the core flexibility of having plugin implementations extending a core system’s functionality but o…

linux上使用系统安装和Docker安装mysql的两种方式

一、安装到linux 1、安装mysql-server 1、在安装之前查看下系统是否已经安装了mysql ls /usr/share2、安装mysql-server sudo apt-get install mysql-server3、再次查看&#xff0c;发现多了个mysql ls /usr/share | grep mysql //在ls打印结果中搜索mysql关键字4、登陆 在…

chatgpt赋能Python-python_lamb

Python Lambdas - 强大的匿名函数 Python是一个充满了强大特性的编程语言&#xff0c;其中之一就是Python的lambda函数。在这篇文章中&#xff0c;我们将介绍Python lambdas的基础知识、使用方法、优缺点以及与普通函数的区别。 什么是Python Lambda函数 Python Lambda函数&…

咖啡「江湖」:从1999到2023

【潮汐商业评论/原创】 “我现在几乎每天都要来杯咖啡&#xff0c;哪怕周末在家休息也是。上班喝美式是为了提神&#xff0c;在家做拉花是享受生活&#xff0c;平时和朋友出去大概率还是会选择咖啡馆&#xff0c;毕竟看起来有氛围还不发胖。”Allen说道。 事实上&#xff0c;…

地铁车辆项目RAMS管理

导读 由于RAMS管理可以为轨道交通提供安全保障&#xff0c;提高运行效率&#xff0c;该管理模式在国外已得到广泛应用&#xff0c;并取得了良好成效。因此引入RAMS管理是确保城市轨道交通车辆安全发展的必然趋势。本文分析地铁车辆项目RAMS管理的必要性&#xff0c;阐述了项目各…

不要做一个透明人:展现真实的自己

✨求关注~ &#x1f600;博客&#xff1a;www.protaos.com 目录&#xff1a; 引言&#xff1a;透明人的困境透明人的定义与特征 2.1 透明人的追求与代价 2.2 社交媒体与透明人现象的关系透明度的局限性 3.1 自我保护与隐私权 3.2 虚假的透明度和个人形象管理重建真实的自我 4.…

城市内涝的原因和解决措施,内涝监测预警助力城市防涝度汛

城市内涝是城市化进程中最遇到的自然灾害&#xff0c;城市内涝不仅会对市民生活造成困扰&#xff0c;也会对城市基础设施和经济发展产生不利影响。因此&#xff0c;及时监测城市内涝现象&#xff0c;对于城市管理和城市安全具有重要意义。本文将深入探讨城市内涝的原因以及针对…

docsify安装(线上文档)

01、docsify 是什么 一款神奇的文档生成利器 自从有了 Markdown&#xff0c; 我就再没用过富文本编辑器&#xff0c;因为 Markdown 的书写有一种心流的感觉。很多博客平台都支持 Markdown 了&#xff0c;即便是不支持&#xff0c;也没关系&#xff0c;可以通过 mdnice 或者 Md…

亚马逊云科技推出全新即用型模型,通过机器学习在几分钟内生成见解

4月10日&#xff0c;亚马逊云科技宣布推出Amazon Amazon SageMaker Canvas中的新功能&#xff0c;这些功能可帮助业务分析师通过机器学习&#xff08;ML&#xff09;在几分钟内从数千个文档、图像和文本行中生成见解。新功能推出后&#xff0c;可以访问即用型模型&#xff0c;创…

六、数据仓库详细介绍(ETL)工具篇下

0x00 前言 上篇&#xff0c;我们介绍了五种传统 ETL 工具和八种数据同步集成工具。 数据仓库详细介绍&#xff08;五.ETL&#xff09;工具篇上 本篇&#xff0c;我们接着介绍两种新型 ETL 工具、大数据发展不同阶段产生的六种主要计算引擎、五种流程控制组件。 最后我们简单…

空间转换案例-3D导航

想要制作这么一个简单的 3D 导航栏需要了解以下几个知识 : 1.空间转换 : 从坐标轴角度除了我们熟知的 X , Y 外还会和 Z 坐标轴 构成一个立体空间, Z轴的位置与我们眼睛视线的方向相同. 空间转换的属性仍然是 transform ,所以可以给他添加 空间的 平移,旋转,缩放 等效果. 2.空…

[问]python中字典dict如何排序sorted?

文章目录 一、sorted使用二、按照keys的顺序对dict中的keys排序三、按照valuse的顺序对dict中的values排序四、按照keys的顺序对dict中的items排序五、按照values的顺序对dict中的items排序六、按照keys的顺序对dict的values排序七、按照values的顺序对dict中的keys排序八、字典…

【Http协议③】http状态码,响应报头,响应正文等知识的学习

前言: 大家好,我是良辰丫,上一篇文章中我们已经学习了http请求的一些知识,这篇文章我将带领大家去领略http响应的风采,不要着急,跟随良辰的步伐,一起去学习http.&#x1f49e;&#x1f49e;&#x1f49e; &#x1f9d1;个人主页&#xff1a;良辰针不戳 &#x1f4d6;所属专栏&a…

单点登录二:登录过程使用摘要算法和加盐的意义以及demo练习

上一篇《springboot项目使用redis、springSecurity、jwt实现单点登录》写了关于单点登录的架子&#xff0c;但是没有实现密码验证的细节。这里使用盐和摘要算法来实现一个密码验证的完整过程demo。 1、依赖没变&#xff0c;还是上一篇内容那些 <dependencies><depen…

职称认定和职称评审有什么区别?甘建二告诉你

职称认定和评审有什么区别呢&#xff1f;通常大家都在说职称认定和评审不知道中间是不是有什么区别&#xff1f;今天甘建二给大家捋一捋&#xff1a; 一、职称认定 职称认定要求学历条件比较严苛的&#xff1a; 1.毕业专业与评审专业一致&#xff0c;不能跨专业认定&#xff0…