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...
  • liyongming1982
  • liyongming1982
  • 2013年11月17日 10:58
  • 1473

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

int __kprobes register_kprobe(struct kprobe *p) { int ret = 0; struct kprobe *old_p; struct m...
  • liyongming1982
  • liyongming1982
  • 2013年11月19日 22:42
  • 1415

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

首先可以看下探测点检测到非法指令时候,产生中断的dump_stack: symbol] (dump_backtrace+0x0/0x10c) from [] (dump_stack+0x18/0x1...
  • liyongming1982
  • liyongming1982
  • 2013年11月19日 22:55
  • 1612

Linux内核调试技术——kprobe使用与实现

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集...
  • luckyapple1028
  • luckyapple1028
  • 2016年12月18日 16:43
  • 4053

Linux内核调试技术——kprobe使用与实现

Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术。利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集...
  • andy205214
  • andy205214
  • 2017年08月13日 18:07
  • 294

ARM架构kprobe应用及实现分析(1.0 简单示例)

网络对krpobe的实现机制及扩展都不是特别详细 由于工作需要及个人爱好,正好有这个机会好好学习此模块及应用到实际中 并将整个应用扩展及当时的分析情况,详细记录下来,希望对感兴趣的人有些许帮助 最开始...
  • liyongming1982
  • liyongming1982
  • 2013年11月16日 22:24
  • 1318

ARM架构kprobe应用及实现分析(2.0 register_kprobe error 38)

最开始 register_kprobe 的时候,返回错误,一直注册不成功,且返回错误号为38 最后发现是一些kernel编译的配置没有打开导致的. 所以当你编译kernel之前请确保下面选项是打开支持...
  • liyongming1982
  • liyongming1982
  • 2013年11月16日 22:38
  • 1672

Linux下 kprobe工具的使用

此处转载: 一、Kprobe简介 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它几乎可以跟踪任何函数或被执行的指令以及一些异步事件...
  • YSBJ123
  • YSBJ123
  • 2016年04月11日 21:10
  • 1853

Kprobes源码分析----kprobe的处理

在探测点注册kprobe后,会在执行到探测点的指令时触发断点异常(trap 3)。kprobes在断点异常的通知链die_chain上注册了自己的处理函数,这个函数就是kprobe_exception...
  • moonvs2010
  • moonvs2010
  • 2013年11月10日 09:26
  • 1918

大数据应用以及原理分析

大数据应用以及原理分析
  • zhx278171313
  • zhx278171313
  • 2014年03月12日 23:20
  • 4521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM架构kprobe应用及实现分析(11 原理)
举报原因:
原因补充:

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