查看此评论Windows c++ service faulting on ucrtbase.dll when starting
(与帖子重复)
ucrtbase + 7350e是CRT中止功能中的int 0x29指令。这是具有代码FAST_FAIL_FATAL_APP_EXIT(7)的KERNEL_SECURITY_CHECK_FAILURE的__fastfail内在函数。该中断由KiRaiseSecurityCheckFailure处理,从而引发STATUS_STACK_BUFFER_OVERRUN(0xC0000409)
从调试的角度来看,那里提供的信息很有用(从学术上讲非常有用,不是运行时发生溢出的错误,他只是倒霉的一个举报者),该用户如何确定这一点?
我意识到已经提供了一些C语言运行时的代码,但是如何从偏移量过渡到源文件呢?
我有一个类似的问题正在尝试在这里查找:
Fault Module Name: ucrtbase.dll
Fault Module Version: 10.0.14393.2097
Fault Module Timestamp: 5a820a13
Exception Offset: 000000000006eabe
Exception Code: c0000409
我正在ucrtbase + 6eade上寻找代码
答案 0 :(得分:1)
即使应用程序未在调试器下运行或内存转储不可用,也可能会知道该应用程序发生故障的那一行。它可能不会告诉您失败的原因,但它至少会为您提供开始调查的地方。
应用程序失败后,在Windows事件日志中查找如下所示的条目:
“正在对应用程序yourapp.exe进行故障修复,版本1.0.0.0,时间戳记 0x49e0238,模块yourmodule.dll,版本1.1.0.0出现故障,时间戳记 0x09ec5a57,异常代码0xc0000005,故障偏移量 0x000000000051000e,进程ID为0x00,应用程序启动时间为0x00。“
使用windbg.exe -z c:\yourmodule.dll
加载发生故障的模块(确保有符号!)
列出加载的模块(在这种情况下为yourmodule.dll
0:000> lm
start end module name
00000000`00300000 00000000`00425000 yourmodule (private pdb symbols) c:\yourmodule.pdb
通过将事件查看器中报告的“故障偏移量”添加到模块的“起始”地址来查找崩溃的行
0:000> ln 300000+5100e
c:\sources\myclass.cpp(130)+0x14
如果您的符号与生产中的模块不完全匹配,则可以尝试 windbg 命令“ .symopt + 0x40”;它将减少限制。