繁体   English   中英

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

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

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

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

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

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

除了valgrind(这是一个免费工具)之外,如果您不介意使用商业工具,可以使用purify

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

您可以使用GCC Mudflap库/仪器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM