在Linux上的多线程C ++应用程序中检测堆栈溢出/覆盖

时间:2012-06-20 10:42:58

标签: c++ c linux multithreading stack

一个线程是否有可能覆盖另一个线程堆栈中的内存?因此可能 例如,破坏了返回地址。

如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?

我在谈论在Linux x86系统上使用pthreads的C / C ++应用程序。

2 个答案:

答案 0 :(得分:0)

如果您使用自己的内存管理器来减少sbrk系统调用,则valgrind可能无法检测到ABW。因为valgrind会覆盖libc的malloc。如果是这种情况,您可能必须重新链接(或编译)您的程序以使用malloc而不是您自己的内存分配功能。

除了v​​algrind,这是一个免费的工具,如果你不介意使用商业工具,purify可能是另一种选择。

这两种工具在使用方式上有所不同。 使用purify,您需要使用libs purify提供的程序重新链接您的程序。 使用valgrind,您只需通过valgrind运行程序,不需要重新链接。

答案 1 :(得分:0)

您可以使用GCC mudflap库/检测。