文章目录
简介
栈空间的破坏,有一种可能性就是其他线程意外访问本线程的栈空间,导致数据破坏产生coredump。
这种是超级难找原因的一种,因为:
- 非本线程的程序,也就是将代码走查这条路堵死,
- 而且其他线程于本线程没有任何同步的机制,所以产生的机率可能非常的低。
方法
如何调试:
- 使用gdb watch 功能,如果出现的概率非常低,就非常困难。如果每次都能复现,可以尝试这种方法;
- 使用mprotect函数保护被破坏的地址空间。但是这个函数只能整页的做保护;
- 如果出现的地方比较固定也可以尝试加一段时间的等待;
- 或者改写对应的kernel部分的mprotect函数,对于特定的线程做特殊的处理。这种和下一个方法,比较麻烦,但是可以一劳永逸的外出检查。
- 还可以尝试的一个方法就是在kernel里加code:这个方向属于完全正向的方法:
先写一个kernel module,在出现问题的代码里,添加代码,通过这个modul向kernel发送将要被破坏的地址空间;问题是需要写一个kernel module实现这个功能,也算是一个一劳永逸的事情。
如果