linux内核源码Documentation目录下存在kprobe介绍文档如下

Kprobes allows multiple probes at the same address.  Currently,

however, there cannot be multiple jprobes on the same function at

the same time.

If you install a probe in an inline-able function, Kprobes makes

no attempt to chase down all inline instances of the function and

install probes there.  gcc may inline a function without being asked,

so keep this in mind if you're not seeing the probe hits you expect.

A probe handler can modify the environment of the probed function

-- e.g., by modifying kernel data structures, or by modifying the

contents of the pt_regs struct (which are restored to the registers

upon return from the breakpoint).  So Kprobes can be used, for example,

to install a bug fix or to inject faults for testing.  Kprobes, of

course, has no way to distinguish the deliberately injected faults

from the accidental ones.  Don't drink and probe.

Kprobes makes no attempt to prevent probe handlers from stepping on

each other -- e.g., probing printk() and then calling printk() from a

probe handler.  If a probe handler hits a probe, that second probe's

handlers won't be run in that instance, and the kprobe.nmissed member

of the second probe will be incremented.

Kprobes does not use mutexes or allocate memory except during

registration and unregistration.

/sys/kernel/debug/kprobes

  1. crash> gdb disass /r  tcp_v4_rcv   #加载了tcp_debug模块 jprobe
  2. Dump of assembler code forfunction tcp_v4_rcv:
  3.   0xffffffff81782980<+0>:     e8 7b c6 893e  callq  0xffffffffc001f000
  4.   0xffffffff81782985<+5>:     55      push   %rbp
  5.   0xffffffff81782986<+6>:     4889 e5        mov    %rsp,%rbp
  6.   0xffffffff81782989<+9>:     4157   push   %r15
  7.   0xffffffff8178298b<+11>:    4156   push   %r14
  8.   0xffffffff8178298d<+13>:    4155   push   %r13
  9.   0xffffffff8178298f<+15>:    4154   push   %r12
  10.   0xffffffff81782991<+17>:    53      push   %rbx
  11.   0xffffffff81782992<+18>:    4889 fb        mov    %rdi,%rbx
  12.   0xffffffff81782995<+21>:    4883 ec 60     sub    $0x60,%rsp
  13. crash>
  14. crash> gdb disass /r  tcp_v4_rcv    #卸载tcp_debug模块 jprobe
  15. Dump of assembler code forfunction tcp_v4_rcv:
  16.   0xffffffff81782980<+0>:     6666666690  data32 data32 data32 xchg %ax,%ax
  17.   0xffffffff81782985<+5>:     55      push   %rbp
  18.   0xffffffff81782986<+6>:     4889 e5        mov    %rsp,%rbp
  19.   0xffffffff81782989<+9>:     4157   push   %r15
  20.   0xffffffff8178298b<+11>:    4156   push   %r14
  21.   0xffffffff8178298d<+13>:    4155   push   %r13
  22.   0xffffffff8178298f<+15>:    4154   push   %r12
  23.   0xffffffff81782991<+17>:    53      push   %rbx
  24.   0xffffffff81782992<+18>:    4889 fb        mov    %rdi,%rbx
  25.   0xffffffff81782995<+21>:    4883 ec 60     sub    $0x60,%rsp
  26. crash>
  1. (gdb) disass /r  tcp_v4_rcv    #vmlinux中原始文件反汇编
  2. Dump of assembler code forfunction tcp_v4_rcv:
  3.   0xffffffff81782980<+0>: e8 ab 9f0a00 callq  0xffffffff8182c930<__fentry__>
  4.   0xffffffff81782985<+5>:55 push   %rbp
  5.   0xffffffff81782986<+6>:4889 e5 mov    %rsp,%rbp
  6.   0xffffffff81782989<+9>:4157 push   %r15
  7.   0xffffffff8178298b<+11>:4156 push   %r14
  8.   0xffffffff8178298d<+13>:4155 push   %r13
  9.   0xffffffff8178298f<+15>:4154 push   %r12
  10.   0xffffffff81782991<+17>:53 push   %rbx
  11.   0xffffffff81782992<+18>:4889 fb mov    %rdi,%rbx
  12.   0xffffffff81782995<+21>:4883 ec 60 sub    $0x60,%rsp
  13.   0xffffffff81782999<+25>: f6 879000000007 testb  $0x7,0x90(%rdi)
  14.   0xffffffff817829a0<+32>:7556 jne    0xffffffff817829f8<tcp_v4_rcv+120>
  1. crash> gdb disass /r  jprobe_return
  2. Dump of assembler code forfunction jprobe_return:
  3.   0xffffffff8105dcc0<+0>:     6666666690  data32 data32 data32 xchg %ax,%ax
  4.   0xffffffff8105dcc5<+5>:     55      push   %rbp
  5.   0xffffffff8105dcc6<+6>:     48 c7 c0 a0 d7 0000    mov    $0xd7a0,%rax
  6.   0xffffffff8105dccd<+13>:    4889 e5        mov    %rsp,%rbp
  7.   0xffffffff8105dcd0<+16>:    53      push   %rbx
  8.   0xffffffff8105dcd1<+17>:    65480305 af c4 fa 7e add    %gs:0x7efac4af(%rip),%rax        # 0xa188
  9.   0xffffffff8105dcd9<+25>:    488b5818     mov    0x18(%rax),%rbx
  10.   0xffffffff8105dcdd<+29>:    4887 dc        xchg   %rbx,%rsp
  11.   0xffffffff8105dce0<+32>:    cc      int3  
  12.   0xffffffff8105dce1<+33>:    90      nop
  13.   0xffffffff8105dce2<+34>:    5b      pop    %rbx
  14.   0xffffffff8105dce3<+35>:    5d      pop    %rbp
  15.   0xffffffff8105dce4<+36>:    c3      retq  
  16. End of assembler dump.

对tcp_ack中0xffffffff817748bf位置进行kprobe前后对比

通过/proc/kallsyms查看的文件类型对应如下(./scripts/mksysmap):

#   The second row specify the type of the symbol:

#   A = Absolute

#   B = Uninitialised data (.bss)

#   C = Common symbol

#   D = Initialised data

#   G = Initialised data for small objects

#   I = Indirect reference to another symbol

#   N = Debugging symbol

#   R = Read only

#   S = Uninitialised data for small objects

#   T = Text code symbol

#   U = Undefined symbol

#   V = Weak symbol

#   W = Weak symbol

#   Corresponding small letters are local symbols

# For System.map filter away:

#   a - local absolute symbols

#   U - undefined global symbols

#   N - debugging symbols

#   w - local weak symbols

__kstrtab节(保存符号名)、__ksymtab节(所有模块可使用的符号地址)和__ksymtab_gpl节(GPL兼容许可证下发布的模块可以使用的符号地址,其他的未找到

  1. cat /proc/kallsyms | cut -d " "-f 2| sort -u    //查看文件类型
  2. cat /proc/kallsyms | awk '$2=="a" {print $2 "\t" $3}'    //查看某个文件类型对应的符号

附件列表

Kprobe的更多相关文章

  1. 哎呀,发现自己不会用模块的方式用kprobe啊,弱爆了

    在内核外面编译模块,会报warning函数名undefined的错误,解决方法是把函数给export出来:EXPORT_SYMBOL 一直以来,用kprobe比较多的是kprobe event的用法, ...

  2. kprobe原理解析(二)

    上一篇文章和大家简要说明了下kprobe到底应该怎样用,那么现在我们就揭开kprobe神秘的面纱,刨根问底,一睹kprobe的庐山真面目. kprobe的工作过程大致如下: 1)注册kprobe.注册 ...

  3. kprobe原理解析(一)

    kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的“基础设施”,4.0版本的内核中,强大的eBPF特性 ...

  4. kprobe 内核模块

    代码来自于linux内核sample/kprobe kprobe_example.c /* * NOTE: This example is works on x86 and powerpc. * He ...

  5. Linux 下的一个全新的性能测量和调式诊断工具 Systemtap,第 1 部分: kprobe

    kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTr ...

  6. Linux kprobe调试技术使用

    kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术. 利用kprobe技术,可以在内核绝大多数函数中动态插入探测点,收集调试状态所需信息而基本不影响原有执行流程. kpr ...

  7. kprobe原理解析

    参考  http://www.cnblogs.com/honpey/p/4575928.html kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核 ...

  8. [转载] kprobe原理解析(一)

    From: https://www.cnblogs.com/honpey/p/4575928.html kprobe原理解析(一) kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工 ...

  9. Linux下 kprobe工具的使用

    此处转载: 一.Kprobe简单介绍 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它差点儿能够跟踪不论什么函数或被运行的指令以及一些异步事 ...

随机推荐

  1. QQ空间运营 怎么做一个QQ人气号?

    QQ空间,用户太年轻,他们渐渐长大. 空间,用户消费水准偏低,貌似很难开发,除非玩灰链,否则同等人气,和微信比起来,一个地下,一个天上. 然而,他们快要长大,即将成为消费主力军,难免会转移微信,但情怀 ...

  2. python爬虫#数据存储#JSON/CSV/MYSQL/MongoDB/

    Json数据处理 JSON支持数据格式: 对象(字典).使用花括号. 数组(列表).使用方括号. 整形.浮点型.布尔类型还有null类型. 字符串类型(字符串必须要用双引号,不能用单引号). 多个数据 ...

  3. python--模块之sys与python解释器交互模块

    作用:sys模块是与python解释器交互的一个接口.它提供了一系列有关python运行环境的变量和函数. 常用函数:import sys sys.argv #命令行参数list,第一个元素是程序本身 ...

  4. (转载)PHP环境搭建-记录

    PHP环境搭建-记录   转于 http://jingyan.baidu.com/article/fcb5aff797ec41edaa4a71c4.html php5.5 做了大量的更新,在与apac ...

  5. java中集合部分的笔记

    集合类框架概要Collection<E> boolean removeIf(Predicate<? super E> filter)//删除满足条件的元素,如果Collecti ...

  6. hive 打印日志

    hive -hiveconf hive.root.logger=INFO,console -e 'select 1' hive 打印log ,有时hive 在配置时默认不会将mapper reduce ...

  7. Java面向对象之抽象方法&接口

    在开始写抽象类之前,有一个问题我觉得想清楚会对理解抽象类很有帮助:那就是为什么要设计抽象类? 难道用类还不够么,为什么要设计出抽象类这样一个东西.我们可以换个角度来理解,就是有些类本来就是不应该被实例 ...

  8. Spring Boot 2.x Redis多数据源配置(jedis,lettuce)

    Spring Boot 2.x Redis多数据源配置(jedis,lettuce) 96 不敢预言的预言家 0.1 2018.11.13 14:22* 字数 65 阅读 727评论 0喜欢 2 多数 ...

  9. 网易七鱼 Android 高性能日志写入方案

    本文来自网易云社区 作者:网易七鱼 Android 开发团队 前言 网易七鱼作为一款企业级智能客服系统,对于系统稳定性要求很高,不过难保用户在使用中不会出现问题,而 Android SDK 安装在用户 ...

  10. 基于Kafka的服务端用户行为日志采集

    本文来自网易云社区 作者:李勇 背景 随着互联网的不断发展,用户所产生的行为数据被越来越多的网站重视,那么什么是用户行为呢?所谓的用户行为主要由五种元素组成:时间.地点.人物.行为.行为对应的内容.为 ...