ARM架构kprobe应用及实现分析(1.0 简单示例)
来源:互联网 发布:dhcp服务器软件下载 编辑:程序博客网 时间:2024/05/21 10:46
网络对krpobe的实现机制及扩展都不是特别详细
由于工作需要及个人爱好,正好有这个机会好好学习此模块及应用到实际中
并将整个应用扩展及当时的分析情况,详细记录下来,希望对感兴趣的人有些许帮助
最开始还是先给个具体的栗子:
参考: kernel/samples 下面有不少的例子
/* For each probe you need to allocate a kprobe structure */static struct kprobe kp = {//.symbol_name= "do_fork", .symbol_name= "testAddadd5",};
当运行到监控的某个点的时候,会调用此函数
static int handler_pre(struct kprobe *p, struct pt_regs *regs){ printk(" kprobes name is %s pt_regs size is %d \n",p->symbol_name,sizeof(regs->uregs)); return 0;}
初始话,注册一个kprobe,可以传入函数名或者在内存的绝对地址(system.map)
static int __init kprobe_init(void){int ret;kp.pre_handler = handler_pre; ret = register_kprobe(&kp); printk(KERN_INFO " Planted kprobe at %p\n", kp.addr);if (ret < 0) {printk(KERN_INFO " register_kprobe failed, returned %d\n", ret);return ret;}return 0;}
注销kprobe探测点
static void __exit kprobe_exit(void){unregister_kprobe(&kp);printk(KERN_INFO " kprobe at %p unregistered\n", kp.addr);}module_init(kprobe_init)module_exit(kprobe_exit)MODULE_LICENSE("GPL");
system.map
//现在我们只关心 do_fork testAddadd5 这两个函数
它们在内存的地址如下:
c0052368 T testAddadd5
c00523c0 T do_fork
static struct kprobe kp = {
//.symbol_name = "do_fork",
.symbol_name = "testAddadd5",
};
register_kprobe(&kp)
printk(KERN_INFO " Planted kprobe at %p\n", kp.addr);
insmod
<6>[ 9749.442971] (0)[5251:insmod] Planted kprobe at c0052368
发现这里打印的地址与system.map是一致的。
- ARM架构kprobe应用及实现分析(1.0 简单示例)
- ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)
- ARM架构kprobe应用及实现分析(11 原理)
- ARM架构kprobe应用及实现分析(10 trap中断注册及回调)
- ARM架构kprobe应用及实现分析(2.0 register_kprobe error 38)
- ARM架构kprobe应用及实现分析(3.0 被探测函数说明)
- ARM架构kprobe应用及实现分析(5.0 打印寄存器的值)
- ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)
- ARM架构kprobe应用及实现分析(7.0 自动显示参数的值)
- ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
- jquery的总体架构分析及实现示例详解
- ARM 架构 dump_stack 实现分析(1.0 具体实例)
- gtest实现架构简单分析
- linux内核kprobe分析
- ARM嵌入式Linux设备树简介及应用示例
- ARM嵌入式Linux设备树简介及应用示例
- ARM嵌入式Linux设备树简介及应用示例
- arcgis中的应用分析及示例
- Android系统Binder机制之一(Service Manager篇)
- 数据挖掘经典书籍
- 在Struts 2中实现文件上传
- 指向继承类的基类指针解引用后,是否还具备多态性
- 改进平滑滚动,修改音量调节级数实现音量微调【编译自XDA 适用于大部分设备】
- ARM架构kprobe应用及实现分析(1.0 简单示例)
- linux网络工具应用详解之二
- 十种心理征兆表明是时候辞职了
- qt 使用opengl库来画圆环
- android 中的 ViewFlipper 的简单使用
- Android系统的Binder机制之二——服务代理对象(1)
- 逆向编程教程(7)
- 网络通信的大端小端问题
- XML简单介绍