Page Fault处理函数在汇编层面如何处理错误码
在 x86_64 架构下#PFPage Fault处理函数的汇编层面处理错误码主要分两个核心部分保存现场时将它作为参数传递以及恢复现场时在iretq之前正确地跳过它。此外错误码本身包含了触发异常的关键信息。第一部分进入处理函数——保存错误码并传递当 CPU 触发#PF时它会自动完成以下操作压栈将错误码压入当前栈中。此时栈顶布局为[rsp] → 错误码 (Error Code) [rsp8] → RIP [rsp16] → CS [rsp24] → RFLAGS [rsp32] → RSP (如果发生了特权级切换) [rsp40] → SS (如果发生了特权级切换)跳转通过 IDT中断描述符表中的#PF门描述符跳转到内核注册的处理函数入口。在汇编入口处需要保存通用寄存器并将错误码作为参数传递给后续的 C 语言处理函数。; 汇编入口page_fault_handler_entry page_fault_handler_entry: ; 1. 保存所有通用寄存器以便在 C 函数中恢复 push rax push rbx push rcx push rdx push rsi push rdi push rbp push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 ; 2. 保存当前栈指针到 rbp方便后续定位 mov rbp, rsp ; 3. 将错误码作为第一个参数传递给 C 函数 ; 注意错误码此时位于 [rbp 15*8] 处 ; 因为我们已经压入了 15 个 8 字节的通用寄存器 mov rdi, [rbp 15*8] ; rdi Error Code ; 4. 将出错的虚拟地址CR2作为第二个参数 mov rsi, cr2 ; rsi Faulting Address push rsi ; 保存 CR2 到栈上可选 ; 5. 调用 C 语言编写的核心处理函数 call do_page_fault ; void do_page_fault(unsigned long error_code, unsigned long address) ; 6. C 函数返回后恢复之前保存的寄存器 ; 注意此时 rsp 需要恢复到保存通用寄存器之后的位置 mov rsp, rbp pop r15 ; ... (按相反顺序弹出所有寄存器) pop rax ; 7. 跳过错误码并返回 add rsp, 8 iretq第二部分do_page_faultC 函数对错误码的解析C 函数do_page_fault会收到错误码并解析其位字段以决定处理方式错误码 Bit含义处理逻辑Bit 0 (P)0 页不存在1 权限违规若为 0分配物理页并建立映射若为 1检查权限。Bit 1 (W)0 读操作1 写操作确定访问类型用于 COW写时复制或只读页错误。Bit 2 (U)0 内核态1 用户态决定是内核错误panic还是用户态错误SIGSEGV。Bit 3 (RSVD)1 使用了保留位通常意味着页表损坏直接触发panic。Bit 4 (I/D)1 指令获取若为 1表示 CPU 尝试从此地址执行指令需特殊处理。第三部分返回前正确处理错误码在汇编中关键在于add rsp, 8指令的位置。它必须紧跟在iretq之前执行为什么是add rsp, 8因为错误码是 CPU 在进入处理程序时压入的它不属于iretq的正常返回栈帧。iretq期望栈顶是RIP如果不跳过iretq会尝试将错误码当作RIP使用导致系统崩溃。错误码的常见陷阱栈偏移计算错误在多级栈帧中如果你在通用寄存器压栈和call指令之间操作了栈那么错误码在栈上的偏移量会发生改变。忘记处理CR2在 64 位模式下出错的地址存放在CR2寄存器中。在调用do_page_fault之前必须将CR2的值也作为参数传递。

相关新闻

Waifu2x-Extension-GUI终极指南:如何选择个人版与商业版实现媒体超分辨率处理

Waifu2x-Extension-GUI终极指南:如何选择个人版与商业版实现媒体超分辨率处理

Waifu2x-Extension-GUI终极指南:如何选择个人版与商业版实现媒体超分辨率处理 【免费下载链接】Waifu2x-Extension-GUI Video, Image and GIF upscale/enlarge(Super-Resolution) and Video frame interpolation. Achieved with Waifu2x, Real-ESRGAN, Real-CUGAN, …

2026/8/4 16:34:32 阅读更多 →
仅0.3%的SD高级用户掌握的全身一致性锚定技术:通过Latent Space Joint Constraint实现端到端肢体连贯性保障

仅0.3%的SD高级用户掌握的全身一致性锚定技术:通过Latent Space Joint Constraint实现端到端肢体连贯性保障

更多请点击: https://kaifayun.com 第一章:全身一致性锚定技术的演进与核心价值 全身一致性锚定技术(Full-Body Consistency Anchoring, FBCA)是现代分布式系统与跨端协同架构中保障状态同步、时序对齐与语义一致性的关键范式。其…

2026/8/4 16:34:32 阅读更多 →
C++ constexpr函数深度解析:从编译期计算到实战应用

C++ constexpr函数深度解析:从编译期计算到实战应用

1. 项目概述:为什么我们需要深入理解constexpr? 在C的世界里,性能优化和编译期计算一直是开发者追求的目标。从C11引入 constexpr 开始,到C14、C17乃至C20的不断演进,这个关键字已经从一种“高级特性”变成了现代C高…

2026/8/4 16:34:31 阅读更多 →

最新新闻

FanControl终极配置指南:Windows电脑风扇智能控制完全手册

FanControl终极配置指南:Windows电脑风扇智能控制完全手册

FanControl终极配置指南:Windows电脑风扇智能控制完全手册 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…

2026/8/4 17:23:51 阅读更多 →
Illustrator智能填充脚本Fillinger:10分钟从零掌握AI设计效率神器

Illustrator智能填充脚本Fillinger:10分钟从零掌握AI设计效率神器

Illustrator智能填充脚本Fillinger:10分钟从零掌握AI设计效率神器 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在Adobe Illustrator的日常设计工作中,你是…

2026/8/4 17:23:51 阅读更多 →
如何在Windows上直接安装Android应用:APK Installer的5个高效使用技巧

如何在Windows上直接安装Android应用:APK Installer的5个高效使用技巧

如何在Windows上直接安装Android应用:APK Installer的5个高效使用技巧 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上像安装普通软件一样…

2026/8/4 17:23:51 阅读更多 →
构建高性能跨平台局域网文件传输系统:Qt C++框架下的企业级解决方案

构建高性能跨平台局域网文件传输系统:Qt C++框架下的企业级解决方案

构建高性能跨平台局域网文件传输系统:Qt C框架下的企业级解决方案 【免费下载链接】LAN-Share Cross platform LAN File transfer application built with Qt C framework 项目地址: https://gitcode.com/gh_mirrors/la/LAN-Share 在当今数字化办公环境中&am…

2026/8/4 17:23:51 阅读更多 →
sitemap_lastmod陷阱

sitemap_lastmod陷阱

内容更新了但爬虫就是不抓?检查一下 sitemap 的 lastmod 一个真实的排查案例:网站上线两个月,百度收录为零。更诡异的是——明明内容一直在更新,爬虫日志显示 Bytespider 和 Baiduspider 都来过,但就是只抓首页&#x…

2026/8/4 17:23:51 阅读更多 →
n8n中HTTP Request节点的API连接与实战技巧

n8n中HTTP Request节点的API连接与实战技巧

1. HTTP Request节点:n8n中的API连接利器在自动化工作流领域,n8n以其开源、可扩展的特性赢得了众多开发者的青睐。作为n8n的核心组件之一,HTTP Request节点堪称连接外部API的"瑞士军刀"。这个看似简单的节点实际上蕴含着强大的功能…

2026/8/4 17:22:51 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →