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/10/18 2:31:23 阅读更多 →
仅0.3%的SD高级用户掌握的全身一致性锚定技术:通过Latent Space Joint Constraint实现端到端肢体连贯性保障

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

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

2026/10/19 20:19:52 阅读更多 →
C++ constexpr函数深度解析:从编译期计算到实战应用

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

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

2026/10/18 2:32:33 阅读更多 →

最新新闻

Ubuntu 22.04四路鱼眼相机配置实战:从驱动到标定全程记录

Ubuntu 22.04四路鱼眼相机配置实战:从驱动到标定全程记录

1. 写在前面:为什么记录这套四目鱼眼配置前阵子接手一个某视觉项目,需要在 Ubuntu 22.04 上同时跑四路鱼眼相机,做环视拼接和障碍物检测的算法验证。本来以为装个驱动、调个库就能跑通,结果整整花了一个多星期才把所有环节理顺。网…

2026/10/20 3:54:16 阅读更多 →
context-mode实战:构建上下文感知的桌面自动化效率工具

context-mode实战:构建上下文感知的桌面自动化效率工具

context-mode:把“我现在在干嘛”变成系统行为的实战设计先说个我自己的真实感受。同时维护四五个项目的时候,每天最累的不是写代码,而是频繁切换状态。前一分钟还在看生产环境的日志,后一分钟切回编辑器写需求,再过一…

2026/10/20 3:54:16 阅读更多 →
基于潜在时间图的递归时空图神经网络:原理、实现与实战

基于潜在时间图的递归时空图神经网络:原理、实现与实战

1. 问题背景与核心思路:时空预测为什么需要“潜在时间图”前阵子我接手了一个城市传感器流量预测项目,输入是分布在城市不同位置的传感器每小时回传的数值,目标是预测未来 12 个时刻的变化。这类问题我们一般称为“时空预测”。我这次用的方案…

2026/10/20 3:54:16 阅读更多 →
本地部署AI Agent:多模型配置与Skill安装避坑实战

本地部署AI Agent:多模型配置与Skill安装避坑实战

最近我基本把自己泡在一套开源智能体框架里。这东西能本地部署、能接多路大模型、还能用 Skill 把模型从“聊天机器”变成“能干活的执行器”。折腾完之后,我最想说的不是“它有多好用”,而是“文档里没写的坑到底在哪”。这篇就把多模型配置&#xff08…

2026/10/20 3:54:16 阅读更多 →
AI应用落地中的Skills:从提示词到可复用能力封装

AI应用落地中的Skills:从提示词到可复用能力封装

最近一两年做AI应用落地,有个词出现频率越来越高:skills。很多人第一次听到它,以为是那种"Excel技能清单""职场软技能列表"之类的东西,结果一问才知道,圈里讨论的完全是另一回事。我最初接触这个概…

2026/10/20 3:54:16 阅读更多 →
大模型提示词设计7大原则:从角色设定到迭代调优

大模型提示词设计7大原则:从角色设定到迭代调优

1. 先搞清楚:提示词为什么值得认真设计你有没有遇到过这种场景:让AI帮你写一份方案,你洋洋洒洒打了几百字,它回你一篇看着很顺滑、实则没有任何信息量的空话;你让它做个会议总结,结果它只是把你发的聊天记录…

2026/10/20 3:53:15 阅读更多 →

日新闻

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/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →