IRQ 中断不用 add rsp, 8 跳过错误码,而 Page Fault需要
问题的本质在于中断/异常是否由CPU自动向栈中压入错误码以及这个错误码对后续处理是否必须。核心原因CPU是否自动压栈错误码IRQ外部硬件中断和 Page Fault缺页异常在CPU处理流程上有一个关键区别IRQ中断不会由CPU自动压入错误码栈上只有返回地址RIPCSRFLAGS因此处理完IRQ后直接执行iret返回即可不需要跳过任何额外数据。Page Fault#PF中断向量14会由CPU自动压入一个错误码Error Code到栈中通常位于返回地址之后。因此必须在返回前通过add rsp, 8等方式将栈指针推进跳过这个错误码否则iret会因栈布局错乱而出错。详细对比特性IRQ外部中断Page Fault#PF触发源硬件设备如定时器、键盘内存访问异常缺页、权限违规是否压入错误码❌ 否✅ 是32位/64位均压入错误码内容不适用包含访问类型、页表层级、是否为写操作等栈上布局RIP→CS→RFLAGSRIP→CS→RFLAGS→错误码返回前需要add rsp, 8❌ 不需要✅ 必须跳过错误码才能iret是否必须处理通常由操作系统调度必须处理否则触发三重故障错误码Error Code的结构#PF压入的错误码在 x86_64 下是一个 64 位的值低 32 位有效其位字段含义如下位含义0P保护异常0 页不存在1 权限违规1W写操作0 读1 写2U用户模式0 内核模式1 用户模式3RSVD保留页表项1 使用了保留位4I/D指令获取1 指令获取5其他标志某些 CPU 扩展内核在#PF处理函数中通过读取这个错误码决定如何修复分配新页、检查权限、或将异常转发给应用程序如SIGSEGV。为什么 IRQ 不用跳而 #PF 必须跳因为 IRQ 栈上根本不存在需要跳过的数据。如果错误地执行add rsp, 8栈指针会指向错误的位置iret时拿到的RIP是错的CPU 会跳转到随机地址几乎立刻触发#GP通用保护异常造成系统挂起或崩溃。而对于#PF如果不跳过错误码iret会错误地尝试将错误码当作RIP来使用导致栈展开错乱系统崩溃。因此跳过错误码是正确返回的前置条件。中断/异常处理的标准流程x86_64CPU 压栈取决于异常类型无错误码仅压入RIP、CS、RFLAGS有错误码再压入错误码位于RFLAGS之后找到中断门 / 陷阱门IDT 中的门描述符如果是中断门RFLAGS.IF被清零屏蔽后续中断如果是陷阱门IF不清零切换到内核栈IST或TSS中的RSP0执行内核处理函数读取错误码处理逻辑返回有错误码add rsp, 8跳过错误码无错误码直接iret恢复RFLAGS和用户态上下文补充说明IRETvsIRETQ在 x86_64 中始终使用iretq64 位版本返回。iret本身会根据当前模式自动选择操作数大小但在长模式下建议显式使用iretq。中断嵌套某些 IRQ如定时器中断也可能在内核处理中触发#PF此时栈上会叠加多层错误码需要逐层处理。MSR 与 RFLAGSSYSCALL会在进入内核时通过IA32_FMASK自动屏蔽RFLAGS中的IF但硬件中断不涉及 MSR而是通过RFLAGS.IF的位控制。总结IRQ 不需要add rsp, 8因为它根本没有被压入错误码而#PF必须这样做因为 CPU强制压入了错误码跳过它是正确返回的必要前提。

相关新闻

吴江工厂想拓展客源,GEO 区域获客方法值得参考

吴江工厂想拓展客源,GEO 区域获客方法值得参考

先问个问题:你在豆包、DeepSeek里搜过“吴江纺织加工厂推荐”或者“吴江做精密铸造的厂家哪家好”吗? 吴江一个做纺织辅料的老李试了一下,回来有点纳闷。他在本地做了十几年,设备、产能、品控都在线,结果AI推荐了几家同…

2026/10/17 5:28:15 阅读更多 →
PVZ Toolkit终极指南:5大核心功能解析与高效使用技巧

PVZ Toolkit终极指南:5大核心功能解析与高效使用技巧

PVZ Toolkit终极指南:5大核心功能解析与高效使用技巧 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PVZ Toolkit是一款专为植物大战僵尸一代PC版设计的开源综合修改器,基于…

2026/10/17 5:28:31 阅读更多 →
3步搞定iOS虚拟定位:iFakeLocation完整使用指南

3步搞定iOS虚拟定位:iFakeLocation完整使用指南

3步搞定iOS虚拟定位:iFakeLocation完整使用指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 还在为iOS应用的位置测试而烦恼吗?…

2026/10/20 6:08:37 阅读更多 →

最新新闻

wrf-python实战:安装、getvar诊断变量与WRF后处理全攻略

wrf-python实战:安装、getvar诊断变量与WRF后处理全攻略

简介:这是一份面向气象研究与数值模式应用者的Python库资源,即wrf-python 1.1.3官方发行版。该库用于读取、诊断和可视化WRF模式输出,支持Python 3环境下的风场、温度、降水等常见变量计算与制图,适合科研人员及研究生在模式后处理…

2026/10/20 13:36:45 阅读更多 →
报错注入原理与实战:从数据库报错到数据提取的完整链路

报错注入原理与实战:从数据库报错到数据提取的完整链路

1. 报错注入到底在打什么:从一条数据库报错说起很多刚接触Web安全的朋友,第一次听到“报错注入”这四个字,脑子里浮现的画面大概是:页面上突然弹出一堆红色错误信息,然后攻击者就“黑”进去了。这个理解不能说错&#…

2026/10/20 13:36:45 阅读更多 →
LeetCode 160 相交链表:双指针与长度差法全解析

LeetCode 160 相交链表:双指针与长度差法全解析

刷 LeetCode 刷到链表题,十道里总有几道绕不开反转和相交这两个主题。今天要聊的#160 相交链表(Intersection of Two Linked Lists),是我印象里出现频率非常高的一道题,面试中常被用来做“暖场题”或者“二轮基本功”。…

2026/10/20 13:36:45 阅读更多 →
技能拆解与刻意练习:构建个人技能树的五个关键步骤

技能拆解与刻意练习:构建个人技能树的五个关键步骤

说实话,第一次拿到"skills"这个标题的时候,我对着空白文档愣了好一会儿。一个单词,没有任何注释,没有项目背景,没有技术文档,这反而是最难写的一种输入。因为"技能"这两个字太宽泛了&a…

2026/10/20 13:36:45 阅读更多 →
英伟达与Nebius追加1000万美元扶持欧洲AI开源

英伟达与Nebius追加1000万美元扶持欧洲AI开源

英伟达与Nebius正在把AI开源生态的争夺战打到欧洲。继9月全球启动AI Builder Program后,双方宣布向欧洲追加1000万美元(约7150万元人民币)投入,用于算力资助、创始人融资对接和开发者社区活动。Nebius总部位于欧洲,这一…

2026/10/20 13:36:45 阅读更多 →
从技能清单到能力体系:可迁移能力的拆解与验证方法

从技能清单到能力体系:可迁移能力的拆解与验证方法

大概是五六年前,我在一家节奏很快的公司做开发,每天被各种新技术名词裹着往前走。那时候我的“skills”,说白了就是一份越抄越长的备忘录,里面堆满了框架名、工具名、各种公开课的完成记录,看起来特别有安全感。但真到…

2026/10/20 13:35:45 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →