【发布时间】:2017-04-19 14:02:33
【问题描述】:
在我的项目中,我使用了不会更新的较旧的第 3 方 DLL。它用于解压缩数据。它解压缩数据并将结果放入传递给它的缓冲区中。
问题在于,如果将生成的数据放入没有分配足够空间的缓冲区中,则可能会发生缓冲区溢出。此缓冲区大小是压缩数据前的 int32 值。如果存在不正确的缓冲区大小,则会发生缓冲区溢出,从而导致堆损坏。
您如何从中恢复?我可以检测到如果发生了缓冲区溢出,但只有在调用 DLL 的解压缩函数之后。
感谢您的宝贵时间!
【问题讨论】:
-
你用什么dll?既然这么容易崩溃,为什么不换成其他的呢?
-
@KrzysztofSzewczyk 因为它是唯一可以处理这种压缩格式的。
-
@stark 我认为旧库不会给您带来错误。
-
@mrg95 -- 请给我们这个函数的文档链接。很难相信用户在调用函数之前无法以某种方式获取大小。许多 API 有两种模式,一种模式是使用“NULL”或特殊参数调用 API 函数以仅返回所需的大小。
-
我会传递一个 NULL 作为缓冲区,看看会发生什么。此外,是否有一个“out”参数或返回值告诉您实际大小是多少?如果没有,那么这个函数真的不应该被使用,因为它对于任何实际工作基本上是无用的。 “out”值至少可以让您将缓冲区大小调整为正确大小(如果您选择的大小太大)。
标签: c++ dll buffer-overflow