我有一个缓冲区溢出,我绝对看不出来(在C中)。首先,大概只有10%的时间发生。每次从数据库中提取的数据在执行之间似乎没有太大的差异......至少在我看来不会发现任何可识别的模式。从Visual Studio确切的消息是这样的:需要缓冲区溢出的帮助
缓冲区溢出发生在 hub.exe已损坏的 程序的内部状态。按 中断调试程序或继续 终止程序。
有关更多详细信息,请参阅帮助主题 '如何调试缓冲区溢出问题'。
如果我调试,我发现它在__report_gsfailure()
,我敢肯定是从编译器/ GS标志,也意味着这是堆栈溢出,而不是堆破碎。我也可以看到它在离开时抛弃它的功能,但是我看不到会导致这种行为的任何东西,这个功能也存在了很长时间(10年以上,虽然稍作修改)据我所知,这从来没有发生过。
我会发布函数的代码,但它很长,并引用了很多专有函数/变量/等。
我基本上只是寻找一些我应该寻找的想法,我没有或者可能有些工具可以帮助。不幸的是,我发现几乎所有的工具都只能帮助调试堆上的溢出,除非我错了,这是堆栈中的事情。提前致谢。
我加入了一些本地变量缓冲区,希望能够获得一些价值,并且这个问题在25次左右的尝试中都没有被重现(这比以前我所做的要多2-3倍)。这就像我添加的缓冲区填充了一切,足以让任何事情都没有崩溃。即使在我调试它们的时候,缓冲区在每次从函数返回之前都会保持我期望它们的确切值。 – Morinar 2010-04-30 21:42:00
如果你只是扩展你的缓冲区,并且在它的末尾写入一些已知的值,那该怎么办? – 2010-04-30 21:44:59
你说如果我知道我正在覆盖哪个缓冲区。如果不明确,我完全不知道。如果我知道哪个缓冲区超时,我只会设置一个硬件断点并获胜。 – Morinar 2010-04-30 22:26:26