如何在不使用gdb的情况下找到谁在c(linux)中破坏堆栈?

时间:2014-08-24 12:09:37

标签: c linux memory stack

我正在运行一个多进程应用程序,它总是在一个函数崩溃,但我可以看到该函数的堆栈已被破坏,它正在从该函数内部的函数调用返回时被破坏。但是当我试图打印父函数堆栈在被调用函数内部被更改的地方时,它不会在被调用函数内的任何地方发生变化,但它会在从被调用函数返回后立即更改。知道为什么堆栈只有从函数返回时才会被破坏? 由于我在目标mips框上运行,我试图通过gbdserver使用地址断点来查看谁正在写入该堆栈。但是gdbserver存在一些问题,它不跟踪我感兴趣的子进程。任何想法我们怎么能抓住谁以任何其他方式破坏堆栈?

2 个答案:

答案 0 :(得分:0)

使用Valgrind。它显示对内存的无效读/写以及它们在哪里。

答案 1 :(得分:0)

检查功能中分配的内存。缓冲区溢出的可能性很大。当一个函数返回时它会解除所有内存的释放,如果有非法的内存覆盖,那么就有可能崩溃。