在我的项目中,我使用了一个不会更新的旧版第三方DLL。它用于解压缩数据。它解压缩数据并将结果放入传递给它的缓冲区中。
问题是如果将结果数据放入未分配足够空间的缓冲区中,则可能发生缓冲区溢出。此缓冲区大小是压缩数据前面的int32值。如果存在不正确的缓冲区大小,则会发生缓冲区溢出,从而导致堆损坏。
你怎么能从中恢复过来?我可以检测到 if 缓冲区溢出,但只有在调用DLL的解压缩函数之后才会检测到。
谢谢你的时间!
答案 0 :(得分:0)
唯一真正的解决方案是让缓冲区大于任何可能的结果大小。如果你不这样做,那么通过你对函数的描述,一旦你调用了函数,就可能已经发生了堆损坏。