代码之家  ›  专栏  ›  技术社区  ›  sum1stolemyname

对内存泄漏的第三方DLL进行沙盒处理时

  •  2
  • sum1stolemyname  · 技术社区  · 14 年前

    我正在寻找一种方法来治愈我必须使用的漏洞DLL的症状。虽然库(OpenCascade)声称提供内存管理器,但到目前为止,我还不能让它释放它分配的任何内存。

    我至少希望把对这个模块的调用放在一个“沙盒”中,以防止在OCC模块不再运行时我的应用程序丢失内存。

    我的问题是:当我意识到这将是一个丑陋的黑客(tm)这样做,有没有可能预先分配一段内存专门用于图书馆,或在它周围建立某种沙盒,以便我可以跟踪他们使用的内存区域,以便在我完成时释放他们自己?

    或者这会使黑客难堪,我应该尝试解决问题,否则呢?

    3 回复  |  直到 13 年前
        1
  •  6
  •   sharptooth    14 年前

    唯一可靠的方法是将库的使用分离成一个专用的过程。您将启动这个过程,向它传递数据和参数,运行库代码,检索结果。一旦您决定不再允许内存消耗,就重新启动进程。

        2
  •  3
  •   David X    14 年前

    使用一个没有损坏的库可能会容易得多,但是如果替换的INS不可用,您可以尝试截获分配调用。如果库不是很“优化”(特别是函数内联),您可以将其分解并定位malloc和free函数;加载时,您可以用指向您自己的内存分配器的字节序列替换每4(或p64系统上的8)个对该地址进行编码的字节序列。不过,这几乎可以保证是一个错误的、不可读的时间链接,所以如果你能找到一个有效的替代品,就不要这样做。

    编辑:

    看到了@sharptooth的答案,这有更好的工作机会。不过,我还是建议你找个替代品。

        3
  •  1
  •   Mark    14 年前

    你应该问问罗马莱金的意见——他以前在OCC工作。他至少有一篇文章提到了记忆管理 http://opencascade.blogspot.com/2009/06/developing-parallel-applications-with_23.html .

    如果你问得好,他甚至可能会写一篇文章来解释mmgt的内部结构。