gpt4 book ai didi

crash - 哪种崩溃会在​​ Windows XP 上产生应用程序错误(又名应用程序弹出窗口)?

转载 作者:行者123 更新时间:2023-12-03 15:34:23 28 4
gpt4 key购买 nike

首先,我将描述我所知道的崩溃类型。向下滚动实际问题。请注意,我只对 Windows 处理的崩溃感兴趣。特定的应用程序和框架有时有自己的崩溃处理程序(例如 Cygwin、VCL、Java 或 .NET),我不会讨论这些。

华生医生

在 Windows XP 上,大多数未处理 "Structured Exceptions"例如访问冲突会产生一个 Microsoft 应用程序错误报告对话框(它后来被重命名为“Windows 错误报告”,但可执行文件是 dwwin.exe 我会 call it Dr Watson ):

Dr Watson dialog

它很容易用 *(char*)0=0; 复制

致命应用程序退出

调用 FatalAppExit() 会生成 MessageBox 和事件日志条目,但不会生成 Dr Watson:

Fatal Application Exit

堆栈溢出

在 Windows XP 上,堆栈溢出导致进程在没有任何通知的情况下随意退出。 (我认为这是从 Vista 开始修复的)

它可以用 main(){main();} 重现


我的问题是,是什么导致了其中之一:

AcroRd32.exe - Application Error

此对话框归 csrss.exe 所有,当我看到它时,AcroRd32.exe 进程已经退出。

它还在系统事件日志中写入一个条目(Dr Watson 崩溃不会这样做):

Application popup: AcroRd32.exe - Application Error : The exception unknown software exception (0xc0000409) occurred in the application at location 0x00404def.

我可以通过调用 MessageBox 重现对话框和事件日志条目(但显然不是真正的崩溃):

MessageBox(
0,
"The exception unknown software exception (0xc0000409) occurred in the application at location 0x00404def.",
"AcroRd32.exe - Application Error",
MB_ICONSTOP | MB_SERVICE_NOTIFICATION);

我已经排除了将 Adob​​e Reader 作为服务运行的可能性。它是版本 11.0.08。当Windows Explorer窗口带有PDF文件时,崩溃似乎是偶尔发生的。

当然,我不是要你为我排除 Adob​​e Reader 的故障,只是要求你如何产生“应用程序错误”/“应用程序弹出窗口”类型的崩溃,最好以编程方式进行,这样我就可以了解发生了什么。

最佳答案

这看起来像是 kernel32.UnhandledExceptionFilter 的工作。您可能可以通过以下方式触发此错误消息:

EXCEPTION_RECORD Rec = {
ExceptionCode : 0xc0000409, /* STATUS_STACK_BUFFER_OVERRUN */
ExceptionAddress : cast(void*) 0x404def,
};

CONTEXT Ctx;
RtlCaptureContext(&Ctx);

EXCEPTION_POINTERS Xcep = {
ExceptionRecord : &Rec,
ContextRecord : &Ctx,
};
UnhandledExceptionFilter(&Xcep);

但是在 Windows 7 上并没有为我做这件事,它直接转到 Dr Watson。

似乎在 W7 上起作用的是:

size_t[2] Params = [
0xc0000409, /* STATUS_STACK_BUFFER_OVERRUN */
0x404def, /* exception address */
];

int Response;
NtRaiseHardError(
0xc0000144 /* STATUS_UNHANDLED_EXCEPTION */ |
0x10000000 /* HARDERROR_OVERRIDE_ERRORMODE */,
Params.length,
0, /* UnicodeStringParameterMask */
Params.ptr,
2 /* OptionOkCancel */,
&Response
);

我知道 UnhandledExceptionFilter 某处有这段代码,我只是不知道采用该代码路径需要什么条件。但是您可以自己像这样调用 NtRaiseHardError

结果如下:

enter image description here

我不再使用 XP,因此您必须亲自试验以了解这些方法在 XP 上的表现如何,但希望这能为您提供一个起点。

关于crash - 哪种崩溃会在​​ Windows XP 上产生应用程序错误(又名应用程序弹出窗口)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447445/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com