【问题标题】:How can I find the fault location when using /GS security checks?使用 /GS 安全检查时如何找到故障位置?
【发布时间】:2014-07-10 17:12:28
【问题描述】:

如何找出远程计算机上的 Visual C++ 安全检查失败的地方?

我被带到一个项目来协助并正在使用 Visual Studio 2013,它具有 /GS 安全检查来发现缓冲区溢出。这很棒,我不想关闭它们,但它们导致软件在特定计算机上“崩溃”,我正在努力寻找一种方法来知道在哪里。无法使用捕获和记录异常的常规工具。似乎不再支持 Watson 博士,我无法远程调试计算机。

如果堆栈未通过安全检查,我将不胜感激指向适当工具的指针。谢谢。

【问题讨论】:

  • /GS 违规被视为恶意软件攻击。立即崩溃到桌面,其他任何东西都会为恶意软件提供一个钩子来做一些令人讨厌的事情。诊断它们的唯一方法是附加调试器。它会在进程终止之前自动中断程序。调用堆栈显示违规发生的位置。如果您无法远程调试机器,那么这就是它的结束,您将不得不将它留给客户的 IT 人员。当然,这台机器实际上是恶意软件攻击的目标的可能性不为零:)
  • 你可以在目标机器上enable local crash dump creation。有了故障转储后,/GS 故障通常很容易诊断。
  • @JamesMcNellis 这些转储是否可以在 Visual Studio 中以某种方式使用?如果是的话,这听起来像是解决方案。

标签: visual-c++


【解决方案1】:

感谢汉斯和詹姆斯,答案如下:

首先,在有问题的远程机器上,为可执行文件启用迷你转储。细节在Collecting User-Mode Dumps 但本质是为名字创建key

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
DumpFolder = REG_EXPAND_SZ "c:\Path\To\Folder"
DumpCount = REG_DWORD 0x00000001
DumpType = REG_DWORD 0x00000002

完成后,让您的安全应用程序崩溃,并在该文件夹中获得一个 .dmp 文件。

好的,现在您必须在 Visual Studio 中使用它。这也很容易。在Post-Mortem Debugging Your Application with Minidumps and Visual Studio .NET 中进行了全面描述(不要担心.Net 部分,这不相关),您只需在 Visual Studio 中打开一个文件(没有打开其他项目,也没有打开解决方案而是打开一个文件),然后选择转储文件类型。打开文件,它在 IDE 中显示了一个“运行”项。这将打开文件失败时的状态,并显示异常类型。您的模块的调用堆栈已全部显示,这应该足以知道它在哪里爆炸,以及如何修复它。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多