特定Intel CPU机型上Windows用户态程序异常崩溃问题排查求助
特定Intel CPU上Windows用户态应用的异常崩溃问题
崩溃现象
应用出现多种无明显逻辑原因的崩溃,典型示例如下:
- 尝试从/向有效RSP地址读写时触发错误:
Attempt to read from address ffffffffffffffff 00007ff6`2a0e6581 488b442428 mov rax,qword ptr [rsp+28h] ss:00000003`f62fe798=0000012d3e796200 Attempt to write to address 0000000000000000 00007ff7`a81d78de 4889442430 mov qword ptr [rsp+30h],rax ss:00000029`293ff4d0=00000029293ff5e8
- 触发“Attempt to execute non-executable address”错误,且报错地址与当前RIP不匹配:
Attempt to execute non-executable address 00007ff60000000a 00007ff6`a050d940 c744243cffffff7f mov dword ptr [rsp+3Ch],7FFFFFFFh Attempt to execute non-executable address 00007ff7`d6bf5f01 00007ff7`de335f01 mov rax,qword ptr [rsp+28h] ss:000000c5`118fe998=000002619c546930 Attempt to execute non-executable address 00007ff7`00a05d21 00007ff7`6ca55d21 mov rax,qword ptr [rsp+28h] ss:000000df`a13ff038=00000291867ffb90
- 跳转指令触发“attempted to write address”错误:
Instruction at 0x00007FF6D6CE466C attempted to write address 0x00000048 00007ff6`d6ce466c e98f68f6ff jmp application!libssh2_default_free (00007ff6`d6c4af00)
目前已发现约20个按调用栈分类的崩溃集群,多数集中在同一代码逻辑中。
受影响CPU型号
所有崩溃仅出现在以下三种Intel CPU机型上,从未在AMD或其他Intel CPU上发生:
Intel64 Family 6 Model 165 Stepping 5, GenuineIntel Intel64 Family 6 Model 165 Stepping 3, GenuineIntel Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
已核查两个崩溃集群的700余次崩溃记录,涉及超100个不同客户端。
补充信息
Update 1
- 涉事程序为多线程C++程序,但崩溃发生在单线程运行的代码中,部分转储显示崩溃时无其他线程活跃
- 崩溃常出现在
std::string、std::vector的标准库函数中(如std::vector.resize()) - 程序无自修改代码,所有代码由编译器生成并直接从DLL/EXE运行,无内核态代码
- 运行环境为Windows 10及Windows 11系统
Update 2
- 尝试精简代码复现问题,但无稳定复现性
- 已排除报错工具故障,崩溃每日发生
- 客户端均已安装Windows更新
- 开发团队中仅一台该CPU机型设备出现崩溃
Update 3
已在开发团队的该CPU设备上3次复现相同崩溃,调用栈如下:
application!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy_init+0xd9 [C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xstring @ 4610] application!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::basic_string<char,std::char_traits<char>,std::allocator<char> >+0x68 [C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.29.30133\include\xstring @ 2521] application!StringFormatV+0x1f8 ...
涉事StringFormatV及相关代码如下:
std::string StringFormatV(const char* a_Format, va_list a_VaList) { size_t formattedSize = _vscprintf(a_Format, a_VaList) + 1; if (1 == formattedSize) return ""; std::vector<char> buffer(formattedSize); vsprintf_s(&buffer[0], buffer.size(), a_Format, a_VaList); return &buffer[0]; } std::string StringFormat(const char* a_Format, ...) { va_list vaList; va_start(vaList, a_Format); return StringFormatV(a_Format, vaList); }
崩溃触发于return &buffer[0];语句,此时buffer内容正常;实际崩溃发生在_Tidy_init函数中,报错信息显示RIP与报错地址存在偏差,但寄存器状态与汇编代码匹配。
求助需求
- 识别该问题对应的具体Intel CPU漏洞
- 提供代码层面的规避方案
内容的提问来源于stack exchange,提问作者Codeguard
相关产品推荐
相关产品推荐

