我有一個緩衝區溢出,我絕對看不出來(在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