【问题标题】:Handle buffer overflow from 3rd party dll处理来自第 3 方 dll 的缓冲区溢出
【发布时间】:2017-04-19 14:02:33
【问题描述】:

在我的项目中,我使用了不会更新的较旧的第 3 方 DLL。它用于解压缩数据。它解压缩数据并将结果放入传递给它的缓冲区中。

问题在于,如果将生成的数据放入没有分配足够空间的缓冲区中,则可能会发生缓冲区溢出。此缓冲区大小是压缩数据前的 int32 值。如果存在不正确的缓冲区大小,则会发生缓冲区溢出,从而导致堆损坏。

您如何从中恢复?我可以检测到如果发生了缓冲区溢出,但只有在调用 DLL 的解压缩函数之后。

感谢您的宝贵时间!

【问题讨论】:

  • 你用什么dll?既然这么容易崩溃,为什么不换成其他的呢?
  • @KrzysztofSzewczyk 因为它是唯一可以处理这种压缩格式的。
  • @stark 我认为旧库不会给您带来错误。
  • @mrg95 -- 请给我们这个函数的文档链接。很难相信用户在调用函数之前无法以某种方式获取大小。许多 API 有两种模式,一种模式是使用“NULL”或特殊参数调用 API 函数以仅返回所需的大小。
  • 我会传递一个 NULL 作为缓冲区,看看会发生什么。此外,是否有一个“out”参数或返回值告诉您实际大小是多少?如果没有,那么这个函数真的不应该被使用,因为它对于任何实际工作基本上是无用的。 “out”值至少可以让您将缓冲区大小调整为正确大小(如果您选择的大小太大)。

标签: c++ dll buffer-overflow


【解决方案1】:

唯一真正的解决方案是使您的缓冲区大于任何可能的结果大小。如果你不这样做,那么根据你对函数的描述,一旦你调用了函数,堆损坏可能已经发生了。

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2022-06-10
    • 2013-11-06
    相关资源
    最近更新 更多