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

Detecting stack overrun/overwrite in a multi threaded C++ application on Linux

本文关键字:堆栈 栈溢出 覆盖 应用程序 Linux 多线程 C++ 检测      更新时间:2023-10-16

一个线程是否可以覆盖另一个线程堆栈中的内存?因此可能例如,损坏退货地址。

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

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

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

除了免费工具valgrind之外,如果您不介意使用商业工具,纯化可能是另一种选择。

这两个工具的使用方式不同。使用纯化,您需要将程序与纯化提供的库重新链接。使用valgrind,您只需通过valgrind运行程序,无需重新链接。

您可以使用 GCC 挡泥板库/仪器。