Jprobe在之前经常使用用来对内核流程中的函数挂钩子,劫持相关参数,进行debug调试分析

但在内核调试中经常碰到需要监视的模块数据,而这些数据往往在很多函数中修改,需要程序员人工从大量的内核代码中过滤出这些函数,使用jprobe就需要监控每个函数的入口,涉及的内容比较复杂,而且很多时候的函数符号并没有导出,无法进行监控。而hw-breakpoint则解决了这个问题,它针对于具体的数据模块进行监控,如果发生变化后则触发硬件断点,执行指定函数。

所以jprobe方法称为进程断点,hw-breakpoint则称为数据断点。

Jprobe劫持函数示例如下:

jprobe主要在于劫持函数的处理,往往在于劫持入口很多,需要对应的信息过滤规则,留下自己想要的信息。

补充用法:部分函数没有export,只能通过kallsyms_lookup_name函数获取函数地址,在kp上可以如下使用:

硬件断点(hw-breakpoint)示例:

以上示例代码来源自内核linux-3.0.13-0.27/samples/kprobes/jprobe_example.c和linux-3.0.13-0.27/samples/hw_breakpoint/data_breakpoint.c

待续,后续写一下具体实现机制


内核调试方法:Jprobe与硬件断点来自于OenHan

链接为:http://oenhan.com/jprobe-hw-breakpoint

发表评论