首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测哪个变量/代码正在创建基于堆栈的缓冲区溢出。

如何检测哪个变量/代码正在创建基于堆栈的缓冲区溢出。
EN

Stack Overflow用户
提问于 2022-04-05 00:49:18
回答 1查看 546关注 0票数 0

我有一个应用程序已经开始用0xc0000409 - The system detected an overrun of a stack-based buffer in this application. This overrun could potentially allow a malicious user to gain control of this application.失败了

我有一个完整的崩溃转储和源代码,但这将导致我在Windows中使用terminate()abort()函数,并且我看不到任何特定于应用程序的代码在调用堆栈中跨出。

用户已经表示在启动app UI时会出现内存不足的错误(它可以在命令行上运行,也可以启动UI)。

我的问题是,上面的异常是否表明应用程序试图将过多的数据加载到堆栈中,如果是这样的话,是否有任何方法来检测哪个变量,最好是哪一行代码导致堆栈缓冲区溢出?我正在使用WinDbg和Visual分析转储文件。

堆栈在下面。

代码语言:javascript
复制
WARNING: Stack unwind information not available. Following frames may be wrong.
00 0019d2f8 00868f91 MyApp+0x4ccf73
01 0019d308 7490e9a2 MyApp+0x468f91
02 0019d39c 7709d30e KERNELBASE!UnhandledExceptionFilter+0x172
03 0019ffdc 77061b34 ntdll!__RtlUserThreadStart+0x3b7d4
04 0019ffec 00000000 ntdll!_RtlUserThreadStart+0x1b
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-05 16:03:17

  1. 激活应用程序的应用验证器。它有助于发现问题更接近实际的根本原因。
  2. 然后使用调试器运行它。
  3. 修复你的符号
  4. 使用大型CounterString (16 MB左右;有趣的发电机在这里)并将其粘贴到每个文本框中。这可能会使应用程序中的每个未受保护的缓冲区溢出。
  5. 等待应用程序抛出异常。这可能不是您所看到的确切异常,因为Application可能引入了他自己的异常。
  6. 分析异常并查找Application给出的提示。它可能会为您提供有用的附加信息,这些信息只有在激活了应用程序验证程序之后才可用。
  7. 如果需要,利用CounterString并在内存中找到它(在您的情况下可能在堆栈上)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71745234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档