用mprotect来定位Linux踩内存的问题
2018-03-01 22:48
1866 查看
[align=left] 最恶心的Bug莫过于踩内存,定位了内核问题的朋友都知道。这类问题一直没有很套路的方法解决,都需要走读大量的代码,做大量调试来解决。解这类问题最关键的两点就是,1,找到被踩的内存地址,2,抓住被踩的时序。[/align] 想要找到被踩的内存地址,这里很多时候可以通过堆栈反汇编,和调试,查找出来,虽然很多时候被踩的地方不固定,这就糟糕了。就要想方法发现共同规律,比如是否在同一个全局变量里面,或者都是同一个业务场景里面?
这里介绍一个好方法,如果知道了1,找到被踩的内存地址,2,抓住被踩的时序。可以用mprotect 来帮助定位问题。
这里介绍一个好方法,如果知道了1,找到被踩的内存地址,2,抓住被踩的时序。可以用mprotect 来帮助定位问题。
#include <sys/mman.h> int mprotect(const void *addr, size_t len, int prot); 此函数把自addr开始的、长度为len的内存区的保护属性修改为prot指定的值,prot值如下: prot标签值 描述 PROT_NONE The memory cannot be accessed at all. PROT_READ The memory can be read. PROT_WRITE The memory can be written to. PROT_EXEC The memory can contain executing code.在代码用这个函数把被踩的地址保护起来,如果其他模块或者代码尝试写操作,就会挂死,然后就会有堆栈,就顺着堆栈反汇编查出什么地方踩了内存了。
相关文章推荐
- linux下内存的统计和内存泄露类问题的定位
- Linux系统性能问题定位-内存泄露
- linux下内存的统计和内存泄露类问题的定位
- linux下内存的统计和内存泄露类问题的定位
- Linux下内存统计和内存泄露类问题的定位方法
- linux下内存的统计和内存泄露类问题的定位
- linux下内存的统计和内存泄露类问题的定位
- linux下内存的统计和内存泄露类问题的定位
- Linux下内存统计和内存泄露类问题的定位方法
- linux下内存的统计和内存泄露类问题的定位
- linux下内存的统计和内存泄露类问题的定位
- linux下内存的统计和内存泄露问题的定位-转
- linux 内存问题定位
- linux下内存的统计和内存泄露类问题的定位
- Linux下内存统计和内存泄露类问题的定位方法
- linux下内存的统计和内存泄露类问题的定位
- 话说linux 下的pthread 内存问题 (Valgrind 检测 及定位排除)
- linux下内存的统计和内存泄露类问题的定位
- Linux用户态用信号定位异常退出访问非法内存问题
- linux下内存的统计和内存泄露类问题的定位