检测 Linux 上多线程C++应用程序中的堆栈溢出/覆盖
Detecting stack overrun/overwrite in a multi threaded C++ application on Linux
一个线程是否可以覆盖另一个线程堆栈中的内存?因此可能例如,损坏退货地址。
如果可能,是否有任何调试工具或其他实践来帮助检测此类问题?
我说的是 Linux x86 系统上使用 pthreads 的 C/C++ 应用程序。
如果您使用自己的内存管理器来减少系统调用sbrk
valgrind 可能无法检测到 ABW。因为瓦尔格林德覆盖了libc的malloc
。如果是这种情况,您可能需要重新链接(或编译)程序以使用malloc
而不是您自己的内存分配函数。
除了免费工具valgrind之外,如果您不介意使用商业工具,纯化可能是另一种选择。
这两个工具的使用方式不同。使用纯化,您需要将程序与纯化提供的库重新链接。使用valgrind,您只需通过valgrind运行程序,无需重新链接。
您可以使用 GCC 挡泥板库/仪器。
相关文章:
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的 int main() 中出现堆栈溢出错误
- C++ 对象数组堆栈溢出
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 对象接收堆栈溢出异常 c++ 的排序向量
- 将公共递归转换为尾递归,因为大型输入的堆栈溢出
- C++ 中递归期间的堆栈溢出
- 启动 dll 时 C# 环境堆栈溢出
- 在C++中使用数组时如何防止堆栈溢出?
- 如何修复递归函数导致的堆栈溢出错误?C++
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 为什么析构函数无休止地调用自己(导致堆栈溢出)?
- 为什么堆栈溢出?如有建议,不胜感激
- 主函数执行时C++堆栈溢出异常
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 如何在Windows上报告堆栈缓冲区溢出
- 如何抑制来自 gcc 中地址清理器的堆栈缓冲区溢出
- 声明大数组时堆栈/堆溢出
- c++中栈溢出和分段错误的危险