Chrome 49 在 ReactOS 上 c0000005 崩溃的修复过程
Chrome 49 在 ReactOS 上 c0000005 崩溃的修复过程概述Chrome 49 (Chrome_V49) 在 ReactOS 上启动时立即崩溃异常代码c0000005访问违例EIP0。本文档详细记录了从问题分析到修复的完整过程。1. 启用 Chrome 专用崩溃调试日志修改文件dll/win32/kernel32/client/except.c修改内容在UnhandledExceptionFilter调用的PrintStackTrace函数中添加进程名判断仅当当前进程为Chrome.exe时才打印详细的崩溃调试信息。关键代码 - 进程名判断staticBOOLIsChromeProcess(VOID){CHAR szPath[MAX_PATH];CHAR*pName,*pSlash;if(!GetModuleFileNameA(NULL,szPath,sizeof(szPath)))returnFALSE;/* Extract filename from full path */pNameszPath;pSlashstrrchr(szPath,\\);if(pSlash)pNamepSlash1;pSlashstrrchr(szPath,/);if(pSlashpSlashpName-1)pNamepSlash1;/* Convert to lowercase for comparison */for(pSlashpName;*pSlash;pSlash){if(*pSlashA*pSlashZ)*pSlasha-A;}return(strcmp(pName,chrome.exe)0);}调试日志输出10 步步骤内容说明Step 1Exception Basic Information异常代码、标志、地址Step 2Access Violation Details读/写/执行类型、目标地址Step 3Stack Data DumpESP 附近栈数据定位调用参数Step 4Wine Stub Check缺失函数检查Step 5CPU Registers Dump所有寄存器值Step 6Crash Location Analysis崩溃所在的模块名、基址、偏移Step 7Call Stack Trace帧回溯最多 128 帧Step 8All Loaded Modules所有已加载 DLL 列表Step 9Instruction at EIP崩溃位置的 16 字节机器码Step 10Debug Summary异常类型、崩溃位置摘要2. 第一次崩溃分析EIP0 的 NULL 指针调用崩溃日志摘要ExceptionCode: c0000005 (ACCESS_VIOLATION) ExceptionAddress: 00000000 Operation: READ Faulting Address: 00000000 Registers: EAX: 00000000 EBX: 00000000 ECX: 0012fce4 EDX: c0000001 EBP: 0012fe14 ESI: 0015b0d0 ESP: 0012fca0 EDI: 00400000 EIP: 00000000 Call Stack (3 frames): Frame[0]: Chrome.exe:0x1078f (base00400000) Frame[1]: Chrome.exe:0x63e1a (base00400000) Frame[2]: kernel32.dll:0x12535 (base7C5E0000)分析过程调用栈过短仅 3 帧→ 崩溃发生在 Chrome.exe 的非常早期初始化阶段EIP0→ CPU 试图执行地址 0 处的代码 → 通过 NULL 函数指针调用Frame[0]0x1078f→ 单例构造函数返回后的地址反汇编 Chrome.exe 构造函数使用 hex dump objdump 反汇编 Chrome.exe关键代码段RVA 0x104C0 ~ 0x1078f; Chrome 单例对象构造函数 (size 0x4C 76 bytes) ; 第一次 API 动态解析 0x104EE: call [GetCurrentProcess] ; 获取当前进程句柄 0x10504: call [GetModuleHandleW] ; GetModuleHandleW(kernel32.dll) 0x1050B: call [GetProcAddress] ; GetProcAddress(hMod, IsWow64Process) 0x10513: test eax, eax 0x10515: je SKIP ; 如果 NULL 则跳过 ... 0x1052C: call *%eax ; 调用 IsWow64Process ; 第二次 API 动态解析 0x106B9: push GetProductInfo ; 函数名 0x106BE: push kernel32.dll ; 模块名 0x106C3: call [GetModuleHandleW] ; GetModuleHandleW(kernel32.dll) 0x106C9: push eax ; hModule 0x106CA: call [GetProcAddress] ; GetProcAddress(hMod, GetProductInfo) ... 0x106E7: call *%eax ; 调用 GetProductInfo ← CRASH HERE!根因定位寄存器 栈数据综合分析ESP at 0x0012FCA0: 0x0012FCA0: 004106E9 00000006 00000000 00000000ESP 顶部值0x004106E9对应call *%eax指令后的返回地址RVA 0x106E9指令本身在RVA 0x106E7。call *%eax的分析GetProcAddress(hKernel32, GetProductInfo)→ EAX如果 EAX0函数未找到则call *%eax→ EIP0 → 崩溃根因确认ReactOS 的kernel32.spec文件将GetProductInfo定义为转发器 stdcall GetProductInfo(long long long long ptr) ntdll.RtlGetProductInfo但ntdll.dll 并没有导出 RtlGetProductInfoDLL导出 RtlGetProductInfontdll.dll❌ntdll_vista.dll✅ (Ordinal 2)Chrome 通过GetProcAddress(GetModuleHandleW(kernel32.dll), GetProductInfo)查找函数 → 转发器指向ntdll.RtlGetProductInfo→ ntdll 中没有此函数 → 返回 NULL → Chrome 调用 NULL 指针 → 崩溃。3. 修复修改 kernel32.spec 转发器修改文件dll/win32/kernel32/kernel32.spec修改内容- stdcall GetProductInfo(long long long long ptr) ntdll.RtlGetProductInfo stdcall GetProductInfo(long long long long ptr) ntdll_vista.RtlGetProductInfo修复原理Chrome 在 Vista 兼容模式下运行LdrpInitializeProcessCompat: Found guid for winver 0x600Vista 兼容 shim DLLntdll_vista.dll会被自动加载ntdll_vista.dll确实导出了RtlGetProductInfo修改转发器指向ntdll_vista.RtlGetProductInfo后GetProcAddress能正确解析4. 修复验证修复前ExceptionCode: c0000005 ExceptionAddress: 00000000 Call Stack: 3 frames (Chrome.exe → Chrome.exe → kernel32)修复后ExceptionCode: 80000003 (BREAKPOINT) ExceptionAddress: 021D7BCB (chrome.dll 内有效地址) Call Stack: 20 frames (全部在 chrome.dll 内) EIP Bytes: cc c3 6a 01 e8 05 2d ec 00 cc ...结论✅c0000005NULL 指针崩溃已完全修复✅ Chrome 通过了单例构造函数阶段✅ Chrome 进入了chrome.dll 的主初始化代码⏳ 新的80000003断点异常是 Chrome 内部断言失败需要进一步分析5. 文件变更汇总文件变更类型说明dll/win32/kernel32/client/except.c新增调试代码添加IsChromeProcess()和 10 步调试日志dll/win32/kernel32/kernel32.spec修复GetProductInfo转发器从ntdll改为ntdll_vista6. 编译与部署流程# 编译ninja-C output-MinGW-i386 kernel32# 停止 VME:\VirtualBox\VBoxManage.exe controlvmReactOS-Test-Newpoweroff# 部署到 VDIvdi_tool.exe add output-MinGW-i386\ReactOS-Test.vdi ^ output-MinGW-i386\dll\win32\kernel32\kernel32.dll ^/ReactOS/system32/kernel32.dll# 清除串口日志 启动 VMRemove-Itemoutput-MinGW-i386\serial_output.log E:\VirtualBox\VBoxManage.exe startvmReactOS-Test-New# 查看日志Select-String-Pathoutput-MinGW-i386\serial_output.log-PatternCHROME-DBG

相关新闻

机器学习模型生产化落地:从Notebook到高可靠服务的全链路实践

机器学习模型生产化落地:从Notebook到高可靠服务的全链路实践

1. 项目概述:当模型走出Jupyter,真正开始呼吸真实世界空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号,懂的人立刻会心一笑。它不是在讲怎么调参、怎么画loss曲线,而是…

2026/10/20 10:49:34 阅读更多 →
AI化学家Coscientist:GPT-4自主设计实验的突破

AI化学家Coscientist:GPT-4自主设计实验的突破

1. AI化学家Coscientist:当GPT开始自主设计实验 上周Nature杂志封面文章报道的Coscientist系统,可能是2023年最令人不安又兴奋的AI突破之一。这个由卡内基梅隆大学团队开发的AI化学家,已经能够独立完成从文献检索、实验设计到仪器操作的全流程…

2026/10/20 4:47:23 阅读更多 →
基于LSTM的古诗接龙模型构建与实践

基于LSTM的古诗接龙模型构建与实践

1. 项目概述:古诗接龙小模型的构建思路去年在GitHub上看到一个用LSTM生成古诗的仓库,当时就萌生了自己动手实现一个能玩"古诗接龙"的小模型的想法。这种文字生成任务特别适合用来理解自然语言处理的基础原理,而且相比现代文&#x…

2026/10/20 13:17:19 阅读更多 →

最新新闻

存储接口、总线与协议三者关系详解:从物理连接到数据传输逻辑

存储接口、总线与协议三者关系详解:从物理连接到数据传输逻辑

1. 这不是“背概念”,而是搞懂数据怎么从硬盘跑到你手机屏幕上的你有没有想过,当你在手机上点开一张照片,或者在电脑里双击一个视频文件,背后到底发生了什么?那张照片不是凭空出现的——它得先从硬盘(或SSD…

2026/10/20 22:43:03 阅读更多 →
VB6 SQL Server销售管理系统源码解析与实战避坑指南

VB6 SQL Server销售管理系统源码解析与实战避坑指南

简介:这是一套面向VB6初学者与数据库入门者的销售管理系统完整源码,采用VB6.0结合SQLServer2000开发,适合想通过真实项目理解VB与SQLServer交互操作的学习者参考。压缩包共51个文件,约1.37MB,以frm窗体、frx资源文件、…

2026/10/20 22:43:03 阅读更多 →
Flutter多层级图片预览:InteractiveViewer+ColorFilter高性能实践

Flutter多层级图片预览:InteractiveViewer+ColorFilter高性能实践

1. 项目概述:为什么在Flutter里用InteractiveViewer处理多层级图片不是“炫技”,而是刚需?最近帮某高校实验室重构一个医学影像预览模块,核心需求很朴素:医生要在平板上快速查看CT切片序列——每张图本身是高分辨率DIC…

2026/10/20 22:43:03 阅读更多 →
GDI实时抗锯齿实战:从像素填充到AlphaBlend边缘混合

GDI实时抗锯齿实战:从像素填充到AlphaBlend边缘混合

简介:这份资源面向使用 Windows GDI 进行图形绘制的 VC 开发者,针对 LineTo、Ellipse 等函数在曲线与斜线处产生的明显锯齿问题,提供了一套可实时运行的抗锯齿源代码方案。其核心思路是通过边缘检测识别边界像素,再对邻近像素颜色…

2026/10/20 22:43:03 阅读更多 →
鸿蒙PDF开发实战:从文本提取到批注渲染的完整方案

鸿蒙PDF开发实战:从文本提取到批注渲染的完整方案

1. PDF能力全景:先看清鸿蒙给了我们什么做鸿蒙端的PDF功能,一开始我是拒绝的。我看了不少技术社区的帖子,发现很多开发者在拿到PDF相关的需求时,第一反应就是“能不能用WebView套一个浏览器插件”,结果要么交互体验割裂…

2026/10/20 22:43:03 阅读更多 →
Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

Qt5与hidapi实战:手搓USB HID调试助手,告别串口工具

简介:这是一份面向嵌入式与桌面开发者的USB调试工具源码包,基于Qt5框架与hidapi库实现,可在Windows 10环境下借助mingw编译运行,帮助开发者快速测试和调试支持HID协议的USB设备。资源共19个文件,约1004KB,包…

2026/10/20 22:41:59 阅读更多 →

日新闻

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/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →