2

我正在开发一个多平台 C++ 模糊测试应用程序。该应用程序生成一个子进程并检查它是否意外停止。我已经设法在 linux 上做到这一点,但是,windows 异常处理机制让我很难做到。

我的代码现在执行以下操作: - 调用 CreateProcess 来生成进程。- WaitForSingleObject 等待它终止。- 然后调用 GetExitCodeProcess 并检查退出代码是否对应异常。

一切正常,我已经使用空解引用测试应用程序对其进行了测试,并且我可以优雅地捕获异常。但是,每次我对此进行测试时,都会出现一个 Windows 错误消息框,告诉我发送或不发送错误报告。由于 fuzzer 应该是一个自动测试应用程序,我需要以某种方式禁用此通知,以便即使捕获到异常,fuzzer 也可以继续测试。

我已经尝试安装 SEH 处理程序,但没有运气(显然这些处理程序不是由子进程继承的)。我读过一些关于使用向量异常处理的内容,但假设它是一样的,我相信向量处理程序不是继承的。

有人可以帮我解决这个问题吗?我不知道要搜索什么,我已经用谷歌搜索了很多,但没有找到任何东西。

谢谢!

4

3 回答 3

2

调试 API是一种选择。是 MSDN 的起点。

于 2010-11-30T14:18:00.890 回答
2

按照 frast 的回答,您可以将进程作为具有合适SetErrorMode的进程的进程生成。此(可继承)设置确定哪些错误将导致对话框弹出 - 我在尝试为自动化测试应用程序实现完全相同的事情时发现了您的问题。

为避免出现任何错误对话框,请使用

SetErrorMode(
    SEM_FAILCRITICALERRORS 
    | SEM_NOALIGNMENTFAULTEXCEPT 
    | SEM_NOGPFAULTERRORBOX 
    | SEM_NOOPENFILEERRORBOX);

注入可能是矫枉过正 - 最好使用包装过程。

于 2011-01-13T13:57:08.670 回答
1

尝试将以下代码注入您的子进程:

SetErrorMode(SEM_NOGPFAULTERRORBOX);

在 MSDN 中查找SetErrorMode的详细信息。

在此处阅读有关注入技术的信息: 导入表中的注入代码

于 2010-11-30T14:33:26.613 回答