[英]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.