菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
159
0

gdb内存监控

原创
05/13 14:22
阅读数 29902

gdb watch 内存监控

gdb的watch的内存功能,使用场景一般是发现的情况,要查清楚一块内存被谁给踩了,我们直接使用watch 监控它就可以了。

  • watch *(int*)内存地址: 当监控的内存的内容发生变化(即写操作)时,程序停止运行。
  • rwatch *(int*)内存地址: 当监控的内存的内容发生读操作时, 程序停止运行。
  • awatch *(int*)内存地址: 当监控的内存被读或被写时,程序停止运行。

当你们监控全局变量时,可以直接使用watch 全局变量名的方法。

使用系统库mprotect API 进行内存保护

函数说明: int mprotect(void* addr, size_t len, int prot);
- 参数1, addr需要页对齐
- 参数2, len需要页大小的倍数
- 参数3,prot表示模式,取值为几种枚举值的或操作:PROT_NONE(0, 不能请问)/PROT_READ(1, 可读)/PROT_WRITE(2, 可写)/PROT_EXEC(4, 可执行)

该函数的使用场景是:有代码中申请了一个大内存(大于4K),这块内存很少修改或者不修改,例如一些配置数据等。 如果代码执行过程中发现该块内存被踩,但是具体的地址不能确定,这时就可以使用该函数这块内存保护起来。

使用系统库 perf_event 数据断点 API 进行内存保护

暂时没有使用过。

perf_evnt是内核对用户态提供软硬件性能数据的一个统一接口,用户通过perf_event可以获取到各种性能数据。用户态的函数接口为:

int perf_vent_open(struct perf_event_attr* attr, pid_t pid, int cpu, int group_fd, unsigned_long

发表评论

0/200
159 点赞
0 评论
收藏