以下是Linux内核中通过perf_event监控内存访问的硬件断点触发流程分析,从core.c的入口函数开始:
1. 核心触发路径(kernel/events/core.c)
perf_event_create_kernel_counter()
└─ perf_event_alloc()
└─ hw_breakpoint_alloc() # 分配硬件断点资源
└─ perf_install_in_context() # 将事件绑定到CPU上下文
└─ event_sched_in() # 事件激活
└─ hw_breakpoint_add() # 实际写入CPU调试寄存器
2. 内存访问监控关键函数
(1) 断点属性配置
在perf_event_attr中指定监控类型:
struct perf_event_attr attr = {
.type = PERF_TYPE_BREAKPOINT,
.bp_type = HW_BREAKPOINT_RW, // 读写监控
// 或 HW_BREAKPOINT_W (仅写), HW_BREAKPOINT_R (仅读)
.bp_addr = (unsigned long)&target_var, // 监控地址
.bp_len = sizeof(long), // 监控长度(需对齐)
};
(2) 事件激活入口
核心函数:event_sched_in()
位置:kernel/events/core.c<

最低0.47元/天 解锁文章
1665

被折叠的 条评论
为什么被折叠?



