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

标签 c++ c linux multithreading stack

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

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

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

最佳答案

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

除了免费工具valgrind,如果不介意使用商业工具,purify可能是替代方案。

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

关于c++ - 在 Linux 上的多线程 C++ 应用程序中检测堆栈溢出/覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11117858/

相关文章:

linux - cat/dev/null 到多个文件以清除日志等现有文件

c++ - 在 C++ 中的什么地方使用 override 关键字

c++ - 自动释放资源的通用句柄

C# 平台调用,具有引用和值类型的 C 风格 union

C: 字符串文字到 int 数组

c - 二进制搜索树插入抛出段错误

c++ - 是什么让 g++ 包含 GLIBCXX_3.4.9?

linux - vim 缩进校正无法正常工作

c++ - 在 C++ 中,当它们具有依赖项时,我应该如何在初始化列表中强制执行组合对象构造函数的顺序

c++ - 类继承 : static members and virtual methods