ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
来源:互联网 发布:solidworks软件画足球 编辑:程序博客网 时间:2024/04/30 10:06
// ARM 架构注册kprobeint __kprobes arch_prepare_kprobe(struct kprobe *p){kprobe_opcode_t insn;kprobe_opcode_t tmp_insn[MAX_INSN_SIZE];unsigned long addr = (unsigned long)p->addr;bool thumb;kprobe_decode_insn_t *decode_insn;int is; // 检测地址是否在异常代码段中if (in_exception_text(addr))return -EINVAL; //地址应该为4的整数倍 ,呵呵我把CONFIG_THUMB2_KERNEL // 删除掉了,方便阅读,但是不影响原理分析if (addr & 0x3)return -EINVAL; // 取出探测点的汇编指令insn = *p->addr;decode_insn = arm_kprobe_decode_insn; //暂时保存探测指令,发生trap的时候执行p->opcode = insn;p->ainsn.insn = tmp_insn; ......return 0;}
* INSN_REJECTED If instruction is one not allowed to kprobe, * INSN_GOOD If instruction is supported and uses instruction slot, * INSN_GOOD_NO_SLOT If instruction is supported but doesn't use its slot.// 判断监控的指令是什么类型,不是所有指令都可以监控的enum kprobe_insn __kprobesarm_kprobe_decode_insn(kprobe_opcode_t insn, struct arch_specific_insn *asi){asi->insn_singlestep = arm_singlestep;asi->insn_check_cc = kprobe_condition_checks[insn>>28];return kprobe_decode_insn(insn, asi, kprobe_decode_arm_table, false);}//单步执行,只是简单PC = PC + 4static void __kprobes arm_singlestep(struct kprobe *p, struct pt_regs *regs){regs->ARM_pc += 4;p->ainsn.insn_handler(p, regs);}
// 把break指令写入到探测的地址中#define KPROBE_ARM_BREAKPOINT_INSTRUCTION0x07f001f8#define KPROBE_THUMB16_BREAKPOINT_INSTRUCTION0xde18#define KPROBE_THUMB32_BREAKPOINT_INSTRUCTION0xf7f0a018void __kprobes arch_arm_kprobe(struct kprobe *p){unsigned int brkp;void *addr;brkp = KPROBE_ARM_BREAKPOINT_INSTRUCTION;patch_text(addr, brkp);}void __kprobes __patch_text(void *addr, unsigned int insn){int size; insn = __opcode_to_mem_arm(insn); //往探测地址写入新的指令*(u32 *)addr = insn;size = sizeof(u32); // 把修改从cache真正写到内存中flush_icache_range((uintptr_t)(addr), (uintptr_t)(addr) + size);}
- ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
- ARM架构kprobe应用及实现分析(10 trap中断注册及回调)
- ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)
- ARM架构kprobe应用及实现分析(1.0 简单示例)
- ARM架构kprobe应用及实现分析(11 原理)
- ARM架构kprobe应用及实现分析(2.0 register_kprobe error 38)
- ARM架构kprobe应用及实现分析(3.0 被探测函数说明)
- ARM架构kprobe应用及实现分析(5.0 打印寄存器的值)
- ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)
- ARM架构kprobe应用及实现分析(7.0 自动显示参数的值)
- Kprobes源码分析----kprobe的注册
- Android架构及相关分析
- Eclipse 架构分析和应用(Eclipse平台架构技术分析及基于RCP的应用研究)
- 大数据平台架构及数据分析平台架构
- 分析Linux中Spinlock在ARM及X86平台上的实现
- 分析Linux中Spinlock在ARM及X86平台上的实现
- 分析Linux中Spinlock在ARM及X86平台上的实现
- 分析Linux中Spinlock在ARM及X86平台上的实现
- ocp 10g考试环境模拟器
- ProductModel.class.php
- 命令模式lua实现
- poj1273
- Hadoop2.2.0版本多节点集群安装及测试
- ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)
- Product_catModel.class.php
- CPPUnit用法简介
- SelfformModel.class.php
- 【javaweb源码】JSP+Servlet+MySQL实现注册功能
- About Maze Problem
- matlab简易画板
- linux 地下安装jboss并设置自动启动
- Qt下结构体中的成员使用问题