本人目前就职于烽火集成,从事云计算产品架构设计相关工作,长期专注于内核、虚拟化、分布式、云计算等方向。
技术交流请联系:xiaoding@fiberhome.com
linux提供了kprobe机制来方便我们进行调试。
kprobe的原理是通过替换函数表,使得调用函数前后,会调用在kprobe注册的函数。
下来就来说明下,kprobe的用法。
首先需要编译内核时开启CONFIG_KPROBES选项。
然后编写probe模块。
上面是一个简单的probe模块例子。
在使用kprobe时最主要是需要明白pt_regs结构体中的各项。这样方便我们可以动态获取函数调用时的参数等信息。
pt_regs结构体存储了函数调用中的寄存器的值,所以需要我们明白参数的含义,来帮助我们debug
这里举个使用的pt_regs的例子,通过获取第一个参数,读取相关变量值。
比如想获取函数调用中queue_ra_show 的q->backing_dev_info.ra_pages的值。
我们可以再probe注册函数中这样写
这样就可以从dmesg中拿到想要看到的信息。