中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

2023-05-16

 1. 中断,异常,系统调用相同:
 
  CPU自动压入:

  ss            运行级别提升时需切换堆栈,因此多压入用户态的栈段ss,
  esp           运行级别提升时需切换堆栈,因此多压入用户态的堆栈指针esp,
  eflag
  cs
  eip
  error code

  程序压入部分压入如下寄存器:

  es
  ds
  ebp
  edi
  esi
  edx
  ecx
  ebx

  但是压入的方法各不相同,见entry.S。#define SAVE_ALL,和pt_reg的关系?

  a. 异常:
ENTRY(divide_error)
    pushl$0            #no error code  Wood: 当没有硬件错误码时,在栈中垫上一个空值。
    pushl $do_divide_error    # 压入返回地址
    ALIGN
error_code:
    pushl %ds
    pushl %eax
    xorl %eax, %eax
    pushl %ebp
    pushl %edi
    pushl %esi
    pushl %edx
    decl %eax            # eax = -1
    pushl %ecx
    pushl %ebx
    cld
    movl %es, %ecx
    movl ES(%esp),%edi        # get the functionaddress   ES = 0x20 得到异常高级处理函数地址,见 pushl $do_divide_error
    movl ORIG_EAX(%esp), %edx    # getthe error code,ORIG_EAX    = 0x24,到硬件错误码,见pushl$0,如果CPU压入,则这里不需要压入。这里是为高层函数准备第二个参数error code,因为高层函数全部是fastcall类型的函数
    movl %eax, ORIG_EAX(%esp)   # 把-1存在原来放硬件错误码的地方,这个值用来把0x80异常与其他异常隔离开。?????
    movl %ecx, ES(%esp)         #把 %es的值存入原来放异常高级处理函数地址的位置。
    movl $(__USER_DS), %ecx
    movl %ecx, %ds
    movl %ecx, %es
    movl%esp,%eax           # pt_regs pointer,当前栈指针,这里是为高层函数准备第一个参数pt_regs,因为高层函数全部是fastcall类型的函数
    call *%edi
    jmp ret_from_exception

ENTRY(page_fault)
    pushl $do_page_fault
    jmp error_code

  b. 中断:


2. 进程切换

更新中:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存 的相关文章

  • 核心显卡,集成显卡,独立显卡

    目前显卡已经有好几种了 xff0c 比如独立显卡 核心显卡 以及集成显卡等 xff0c 不同显卡的定位不同 核心显卡 主板集成显卡和独立显卡的区别如下 xff1a 处理器集成显卡就是指集成在cpu内部的显卡 xff0c 通常称为核心显卡 x
  • 遍历JavaScript对象的所有属性

    用来遍历指定对象所有的属性名称和值 obj 需要遍历的对象 author Jet Mah website http www javatang com archives 2006 09 13 442864 html function allP
  • 在VS环境下使用SVN

    由于我和同事要合作做一个小程序 xff0c 所以需要一个源代码管理的工具 在工作的时候我们由于是VS进行 net开发所以一般是使用TFS进行项目管理 但是我们在不同的项目组 xff0c 工作地点不一样 xff0c 而且现有的TFS服务器都是
  • 12小时上线“新冠肺炎同程查询工具”,开发者这样狙击疫情

    阿里妹导读 xff1a 2020开年极为复杂 面对新型肺炎的疫情 xff0c 我们每一个人都与国家命运紧密相连 全社会的力量都凝聚在一起 xff0c 众志成城 xff0c 共克时艰 有这么一群热爱代码的人 xff0c 用自己的方式提升效率
  • 35 个你也许不知道的 Google 开源项目

    Google是支持开源运动的最大公司之一 xff0c 它们现在总共发布有超过500个的开源项目 xff08 大部分都是利用它们的API来完成 xff09 xff0c 本文将列举一些有趣的开源项目 xff0c 其中很可能有不少你不知道的哦 文
  • Ubuntu 清除缓存 apt-get命令参数

    整理了Ubuntu Linux操作系统下apt get命令的详细说明 分享给大家 常用的APT命令参数 xff1a apt cache search package 搜索包 apt cache show package 获取包的相关信息 x
  • [code]使Ext.DatePicker只显示年月选择界面

    Ext override Ext DatePicker onRender function container position var m 61 39 lt table cellspacing 61 34 0 34 gt 39 39 lt
  • The BASEDIR environment variable is not defined correctly This environment variable is needed to run this program

    今天配一台服务器的时候 xff0c 启动tomcat莫名其妙的报错说 xff1a The BASEDIR environment variable is not defined correctly This environment vari
  • BIRT Viewer 参数设置详解

    BIRT作为一款功能强大的开源报表工具 xff0c 其版本的升级更新速度也非常快 xff0c 从1 0到2 0 xff0c 一直到最新的2 2 1版本 xff0c 无论从功能上还是性能上都得到了极大的提高和扩充 BIRT也提供了一个标准的J
  • [code]将Ext.DatePicker年份调到左边,月份调到右边

    Ext override Ext DatePicker createMonthPicker function if this monthPicker dom firstChild var buf 61 39 lt table border
  • ibatis配置log4j输出sql语句等日志信息

    整了一上午的ibatis xff0c 记得自己以前配置过log4j可以输出sql语句 xff0c 但是这次不知道咋了 xff0c 就是不输出 xff0c 找以前的项目还找不到 了 xff0c 上网上搜索了半天 xff0c 都是差不多的配置l
  • Dreamweaver 代码配色方案 DIY

    Dreamweaver 代码配色方案 DIY 最近刚换上隐形眼镜 xff0c 电脑上满屏的白花花的颜色 xff0c 看得我眼泪鼻涕直流 xff0c 无奈 xff0c 代码还是要看滴 xff0c 改造了一下Dreamweaver代码配色方案
  • xampp的apache启动失败

    xampp xff08 apache 43 mysql 43 php 43 perl xff09 是一个功能强大的建站集成软件包 许多人通过他们自己的经验认识到安装 Apache 服务器是件不容易的事儿 如果您想添加 MySQL PHP 和
  • 降级论

    几乎一年没有写博客了 xff0c 说没时间那是借口 xff0c 唯一的原因是 xff0c 年纪越大越发觉自己肤浅 有些想法还没提笔 xff0c 就发现很幼稚 xff0c 就不敢发出来贻笑大方了 这次先给大家说个小故事 xff1a 从前有三个
  • 阿里传奇工程师多隆的程序世界

    阿里妹导读 xff1a 写代码写到入定 xff0c 是一种什么样的体验 xff1f 11月29日 xff08 本周三 xff09 xff0c 阿里技术人纪录片系列 将带大家走进大神多隆的代码世界 在此之前 xff0c 我们先来重温一篇关于多
  • 将Sublime Text2 加入右键菜单

    在googleread里面看有人推荐sublime text2 说开发很方便 就下载一个试试 写html还真的挺爽 于是按照vim加入鼠标右键的方法 果然可以 这里和大家分享 1 运行中输入 regedit 打开注册表 2 在HKEY CL
  • PIXHAWK飞控最新控制部分源码详解与分析(v 1.8.0)

    px4控制源码中文注释及解读 作 者 xff1a chen honglin时 间 xff1a 2018 9 27联系方式 QQ 260437028 写在前面 xff1a 关于本篇文章 作者经过两天的啃代码 发现新版本与旧版本相差不小 而网络
  • PX4应用程序编写

    PX4应用程序编写 本文将较为详细的阐述如何自己写一个程序 xff0c 并且将其添加到编译脚本中去 本文所需基础 多线程编程 第一部分 xff1a 写一个自己的程序 在Firmware src moudle下 xff0c 创建一个文件夹 x
  • 计算机操作系统之系统调用

    目录 x1f4a8 什么是系统调用 xff0c 有何作用 xff1f x1f4a8 系统调用与库函数的区别 x1f4a8 系统调用背后的过程 x1f4a8 总结 我们将带着以下问题去学习什么是系统调用 什么是系统调用 xff0c 有何作用
  • SimpleFOC移植STM32(一)—— 简介

    目录 一 代码移植说明二 控制原理2 1 有感FOC控制原理2 2 有感FOC 不带电流采样 控制原理2 3 FOC heart function 三 适配硬件3 1 Bluepill3 2 SimpleMotor 四 程序架构五 演示功能

随机推荐

  • SimpleFOC移植STM32(二)—— 开环控制

    目录 注意事项一 硬件介绍1 1 硬件准备1 1 1 SimpleMotor方案1 1 2 SimpleFOCShield V2 0 3方案 1 2 硬件连接1 2 1 原理图1 2 2 SimpleMotor接线1 2 3 STM32接线
  • 恶意样本分析-Lab16-01 反调试1分析

    恶意样本分析 Lab16 01 反调试1分析 这个样本是随书 恶意代码分析实战 第十六章的样本 xff0c 主要用来熟悉反调试的一些手段 xff0c 这个算是样本分析中需要掌握的基础知识 这篇笔记会包含了静态分析和静态分析 基本要求 在分析
  • 第3讲 进程间通信

    文章目录 3 1 简介3 2 互联网协议的API3 3 外部数据表示和编码3 4 组播通信3 5 网络虚拟化 xff1a 覆盖网络 3 1 简介 UDP的应用程序接口提供了消息传递 xff08 Message Passing xff09 抽
  • C语言--在排序数组中查找元素的第一个和最后一个位置

    在排序数组中查找元素的第一个和最后一个位置 给定一个按照升序排列的整数数组 nums xff0c 和一个目标值 target 找出给定目标值在数组中的开始位置和结束位置 你的算法时间复杂度必须是 O log n 级别 如果数组中不存在目标值
  • [随笔]初步了解 Levenshtein Distance (Edit Distance) 编辑距离,字符相似度算法

    前几天在CSDN的论坛看到一个需要判断两个字符串之间相差多少个字符的帖子 之前有了解过有相应的算法来计算这个差异 但是没有深入的去了解 刚好趁这个时机了解了一下 Levenshtein Distance Edit Distance 编辑距离
  • 别人在忙挖矿,阿里工程师却悄悄用区块链搞了件大事!

    阿里妹导读 xff1a 当阿里技术遇见区块链 xff0c 会碰撞出什么火花呢 xff1f 天猫进出口技术团队运用区块链技术 xff0c 让每一个进口商品都有了唯一的 身份证 背景 全球溯源计划已成为天猫国际现阶段着重开展实行的战略性方针 x
  • SVM深入理解&人脸特征提取

    目录 一 SVM深入理解1 SVM算法2 重做例子代码 二 人脸特征提取1 采集人脸信息 绘制68个特征点2 给人脸绘制一幅墨镜 三 总结四 参考文献 一 SVM深入理解 1 SVM算法 支持向量机 xff08 support vector
  • 传统优化方法:枚举法、启发式算法和搜索算法

    1 枚举法 枚举出可行解集合内的所有可行解 xff0c 以求出精确最优解 对于连续函数 xff0c 该方法要求先对其进行离散化处理 xff0c 这样就可能因离散处理而永远达不到最优解 当枚举空间比较大时 xff0c 该方法的求解效率比较低
  • Android图形系统的分析与移植--七、双缓冲framebuffer的实现

    1 实现原理 在基本的FrameBuffer已经实现的基础上 xff0c 需要实现的是与Android原本模拟器所使用的goldfish FrameBuffer之间的区别 比较一下不难发现 xff0c 从以下及方面着手 xff1a 1 修改
  • Qt 读写XML文件

    目录 1 常用方法 2 示例 2 1 写文件 2 2 读文件 Qt 对 XML 的读写操作 1 简介 使用XML模块 xff0c 在 pro文件中添加 QT 43 61 xml xff0c 并加如相应的头文件 include lt QtXm
  • 苏嵌15 16.11.16

    Makefile中常用的基本函数 1 subst subset 参数1 参数2 参数3 把参数3中的1替换成参数2 返回被替换的参数3 2 patsubst patsubset 模式参数 参数1 参数2 把参数2中复合模式参数的单词替换成参
  • 用自己的单目&双目相机在ROS 下实现双目ORB_SLAM2

    用自己的双目相机在ROS 下实现双目 ORB SLAM2 参考博客 ROS下单目 SLAM https blog csdn net goding learning article details 52950993 配置ROS 下的 ORB
  • 【Linux】Ubuntu 18.04安装aptitude命令

    在ubuntu18 04 下通过如下命令进行aptitude命令的安装 xff0c span class token function sudo span span class token function apt get span spa
  • 卡尔曼滤波(Kalman Filter)原理理解和测试

    Kalman Filter学原理学习 1 Kalman Filter 历史 Kalman滤波器的历史 xff0c 最早要追溯到17世纪 xff0c Roger Cotes开始研究最小均方问题 但由于缺少实际案例的支撑 xff08 那个时候哪
  • ROS与开发板入门教程-树莓派3源码安装Turtlebot(ubuntu mate 16.04+kinetic+Turtlebot)

    ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate 16 04 43 kinetic 43 Turtlebot ROS与开发板入门教程 树莓派3源码安装Turtlebot ubuntu mate16 04 4
  • Linux下Node.js和NPM安装和配置

    目录 前言 1 安装Nodejs和NPM 2 NPM的配置 3 nodejs的基本使用 3 1 搭建简易后端服务器 4 npm的基本使用 4 1 搭建vue 2 0开发环境 前言 Nodejs简介 Node js是一个基于Chrome V8
  • 年轻人,你为什么要来阿里搞技术?

    阿里妹导读 xff1a 刚刚毕业的年轻技术人 xff0c 为何会选择阿里巴巴 xff1f 也许 xff0c 因为这里是学术和实践充分融合的实验场 xff0c 也许是因为在这里理论的确可以改变生活 xff0c 也许只是为了感受在西湖畔写代码的
  • C语言字符数组与字符串的使用及加结束符‘\0‘的问题

    1 字符数组的定义与初始化 字符数组的初始化 xff0c 最容易理解的方式就是逐个字符赋给数组中各元素 char str 10 61 I a m h a p p y 即把10个字符分别赋给str 0 到str 9 10个元素 如果花括号中提
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 中断,异常,系统调用,进程切换时的堆栈变化和寄存器保存

    1 中断 xff0c 异常 xff0c 系统调用相同 xff1a CPU自动压入 xff1a ss 运行级别提升时需切换堆栈 xff0c 因此多压入用户态的栈段ss xff0c esp 运行级别提升时需切换堆栈 xff0c 因此多压入用户态