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/7/21 1:26:05阅读更多 →
Uber机器学习工程实践:从模型上线到系统稳态的落地指南

Uber机器学习工程实践:从模型上线到系统稳态的落地指南

1. 项目概述:当机器学习走出实验室,撞上真实世界的“水泥墙”我第一次在生产环境里部署一个推荐模型时,信心满满地敲下kubectl apply -f model-deployment.yaml,结果三分钟后告警邮件就堆满了收件箱——API延迟从200ms飙到8秒&…

2026/7/21 1:26:05阅读更多 →
校园竞赛管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

校园竞赛管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

博主介绍:🌟 个人简介 CSDN特邀作者 | 掘金优质创作者,深耕Java生态与现代Web开发技术栈。专业领域涵盖Java企业级开发、Spring Boot微服务架构、前后端分离解决方案,以及学术项目的工程化实践。 📊 影响力数据 全平台…

2026/7/21 1:24:04阅读更多 →
如何测试 ember-cli-fastboot 应用:单元测试与集成测试完整指南

如何测试 ember-cli-fastboot 应用:单元测试与集成测试完整指南

如何测试 ember-cli-fastboot 应用:单元测试与集成测试完整指南 【免费下载链接】ember-cli-fastboot Server-side rendering for Ember.js apps 项目地址: https://gitcode.com/gh_mirrors/em/ember-cli-fastboot 在构建现代Web应用时,服务器端渲…

2026/7/21 13:46:46阅读更多 →
主数据管理平台怎么选?看这篇国内主流厂商速览就够了

主数据管理平台怎么选?看这篇国内主流厂商速览就够了

数据治理,主数据管理(MDM)是关键一环。国内厂商已形成差异化竞争格局,我们快速梳理了各家的核心看点。 老牌专家(中翰软件):2010年入局,行业模板库极其丰富(百万级&#…

2026/7/21 13:46:46阅读更多 →
[Dify实战] 客户投诉来了以后,先用 Workflow 自动分级和生成处理建议

[Dify实战] 客户投诉来了以后,先用 Workflow 自动分级和生成处理建议

上面这张画布图来自此前一个同类客服分诊 Workflow,用来说明这类流程在 Dify 里大致会被拆成多个节点串起来。今天这篇不复用那套工单分诊流程,而是按“客户投诉/差评/退款诉求”重新设计一套更关注风险分级和人工复核的 Workflow。 客户投诉不是普通咨询。普通咨询答错了,…

2026/7/21 13:46:46阅读更多 →
brag项目管理:如何高效组织素材与输出文件结构

brag项目管理:如何高效组织素材与输出文件结构

brag项目管理:如何高效组织素材与输出文件结构 【免费下载链接】brag You built it. Now brag. Turn the project you just created into a short, shareable launch video with one command. 项目地址: https://gitcode.com/gh_mirrors/brag1/brag brag 是一…

2026/7/21 13:46:46阅读更多 →
四步法完整教程:使用OpenCore Legacy Patcher让老款Mac焕发新生

四步法完整教程:使用OpenCore Legacy Patcher让老款Mac焕发新生

四步法完整教程:使用OpenCore Legacy Patcher让老款Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为老款Mac无法升级最新macOS而…

2026/7/21 13:46:46阅读更多 →
从SEED-Labs到实战:无零字节x86 Shellcode编写全解析

从SEED-Labs到实战:无零字节x86 Shellcode编写全解析

1. 项目概述:从实验台到实战场的Shellcode精炼 在安全研究和渗透测试的领域里,Shellcode的编写与优化是一项基础且核心的技能。它不像那些花哨的漏洞利用框架,直接拿来就能用,而是需要你真正理解计算机底层,特别是CPU指…

2026/7/21 13:44:46阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →