ARM架构kprobe应用及实现分析(11 原理)

原创 2013年12月03日 22:31:02

 

1 拷贝探测的code , 插入特殊指令(ARM是插入未定义指令)

2 CPU运行到未定义指令,会产生trap, 进入ISR,并保存当前寄出去的状态

  通过LINUX的通知机制,会执行“pre_handler”(前提是你已经注册过了)

3 进入单步模式,运行你备份出来的代码

 (此代码运行的是拷贝出来的,防止别的CPU也恰巧运行到此位置)

4 单步模式后,运行“post_handler”,恢复正常模式,接着运行下面的指令。

参考: kprobes.txt

How Does a Kprobe Work?

When a kprobe is registered, Kprobes makes a copy of the probed

instruction and replaces the first byte(s) of the probed instruction

with a breakpoint instruction (e.g., int3 on i386 and x86_64).

When a CPU hits the breakpoint instruction, a trap occurs, the CPU's

registers are saved, and control passes to Kprobes via the

notifier_call_chain mechanism.  Kprobes executes the "pre_handler"

associated with the kprobe, passing the handler the addresses of the

kprobe struct and the saved registers.

Next, Kprobes single-steps its copy of the probed instruction.

(It would be simpler to single-step the actual instruction in place,

but then Kprobes would have to temporarily remove the breakpoint

instruction.  This would open a small time window when another CPU

could sail right past the probepoint.)

After the instruction is single-stepped, Kprobes executes the

"post_handler," if any, that is associated with the kprobe.

Execution then continues with the instruction following the probepoint.

 

 

ARM架构kprobe应用及实现分析(5.0 打印寄存器的值)

kp.pre_handler = handler_pre; 在此函数中打印寄存器的值,才能对我们分析当时的情况有帮助。(如查看调用函数的参数值等) static int handler_pre(str...

ARM架构kprobe应用及实现分析(6.0 导出堆栈的值)

上篇讲过了导出寄存器的值 但是当函数参数多余4个的话(R0 R1 R2 R3 ),其他的值会保存在堆栈中,所以必须导出SP附近的值才能查看其它参数的值 此函数实现如下: 第一个参数为SP的值,第...

ARM架构kprobe应用及实现分析(10 trap中断注册及回调)

首先可以看下探测点检测到非法指令时候,产生中断的dump_stack: symbol] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1...

ARM架构kprobe应用及实现分析(9.0 arch_prepare_kprobe平台相关注册)

// ARM 架构注册kprobe int __kprobes arch_prepare_kprobe(struct kprobe *p) { kprobe_opcode_t insn; ...

ARM架构kprobe应用及实现分析(8.0 register_kprobe实现)

int __kprobes register_kprobe(struct kprobe *p) { int ret = 0; struct kprobe *old_p; struct m...

arm架构的独占读写指令ldrex和strex的使用详解(原子操作和自旋锁实现的基本原理)

LDREX 和 STREX 独占加载和存储寄存器。 语法 LDREX{cond} Rt, [Rn {, #offset}] STREX{cond}...

kprobe工作原理

Kprobes 提供了一个强行进入任何内核例程并从中断处理器无干扰地收集信息的接口。使用 Kprobes可以收集处理器寄存器和全局数据结构等调试信息。开发者甚至可以使用 Kprobes 来修改寄存器值...
  • liwg06
  • liwg06
  • 2017年02月19日 02:24
  • 57

Hbase的应用场景、原理及架构分析

Hbase概述          hbase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBas...

ARM 架构 dump_stack 实现分析(1.0 具体实例)

dump_stack也就是我们平时说的backtrace对分析,对异常或crash发生的时候,具有重要的意义   每种架构会有或多或少的区别,如现在linux kernel支持如下架构: alp...

Hbase的应用场景、原理及架构分析

HBase概述          HBase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBase将...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM架构kprobe应用及实现分析(11 原理)
举报原因:
原因补充:

(最多只允许输入30个字)