在内核外面编译模块,会报warning函数名undefined的错误,解决方法是把函数给export出来:EXPORT_SYMBOL

一直以来,用kprobe比较多的是kprobe event的用法,之前用过模块的方式编译过kprobe,但是感觉比较麻烦啊

今天要看看怎么用模块的方法简单编译kprobe:

如何单独编译内核模块

http://blog.sina.com.cn/s/blog_9011bd8c01015ms7.html

这个说得还是比较清楚,但是有几个东西还是不清楚呢,比如make设置了源码的目录,那么内核里面的数据结构他是怎么知道的呢?

 obj-m := kprobe_example.o
obj-m += hello.o
CURRENT_PATH := $(shell pwd)
KERNEL_SRC :=/home/hon/f2fs
MAKE := /usr/bin/make
all:
$(MAKE) ARCH=arm64 CROSS_COMPILE=aarch64-buildroot-linux-gnu- -C $(KERNEL_SRC) M=$(CURRENT_PATH) modules
all:
clean:
rm *.ko

并且还有一个问题,我在一个.c文件中使用了f2fs的一个结构体 f2fs_sb_info,这个时候是要加头文件的

  #include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>

20161203

习惯了qemu,就想着改变了。虚拟机当然好,整坏了也和主机无关,但是现在就想着在真实物理机上整,整坏了也不怕,这台机器就贡献出来折腾了了:

linux在/lib目录下提供了我们编译模块的环境,再也不用担心如何去下代码编模块了!

  1 obj-m = main.o
  2 KVER = $(shell uname -r)
  3 CURRENT_PATH := $(shell pwd)
  5
  6 all:
  7     make -C /lib/modules/$(KVER)/build M=$(CURRENT_PATH) modules
  8 clean:
  9     rm *.ko

但是我们似乎又发现一个问题,那就是我企图使用iterate_supers去检测系统中所有的super_block时,以探测f2fs全局管理结构f2fs_sb_info时发现:iterate_supers函数并没有export_symbols出来,所以要获取到iterate_supers的虚拟地址,我们直接调用它!

怎么通过函数名获得函数执行的地址呢?可以参考kprobe的实现啊,在kprobe中,也是通过函数名得到的函数虚拟地址,跟踪一下发现是用了函数:kallsyms_lookup_name。成功解析出了我Ubuntu上iterate_supers函数的地址。

我机器上iterate_supers函数的地址是:ffffffff812113f0;

其实得到这个sbi的方法有很多,包括使用kprobe打点也是一种方法,然后函数的第一个

哎呀,发现自己不会用模块的方式用kprobe啊,弱爆了的更多相关文章

  1. 架设lamp服务器后,发现未按照 Apache xsendfile模块,

    今天在架设lamp服务器后,发现apache 未按照xsendfile模块,于是查找资料按照如下: 安装apache xsendfile模块yum install mod_xsendfile

  2. [嵌入式开发板]iTOP-4412以模块的方式编译驱动

    本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...

  3. Python模块调用方式详解

    Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...

  4. 【Android】还原“微信”apk中的“发现”和“我”两个模块

    先下载一个微信apk,以压缩包的形式打开,对比微信界面,找出我们需要的素材. 以下两个模块的还原完全采用RelativeLayout相对布局. 按钮效果的实现 点击对应版块,将有点击效果.这可以通过修 ...

  5. led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)

    跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐.教程有三种方法: 1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来.但是需要考虑左移到最后一位时需要自己再写个赋值语 ...

  6. dubbo模块组织方式

    dubbo源码版本:2.5.4 阿里通过maven将dubbo的36个模块组织成了一个项目,各个模块结构如下: -------------------------------------------- ...

  7. python 装饰器、递归原理、模块导入方式

    1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...

  8. 调试和开发npm模块的方式

    ln -s(软连接) 假设my-project是运行npm模块的项目,vue-router是我们需要调试的npm模块 将vue-router下载到与my-project同级目录中. git clone ...

  9. ThinkPHP 多应用多模块建立方式

    ThinkPHP3.2.2及以后版本同一应用多模块和多应用多模块的设计已经比以前的版本更加简单快捷. 注:入口文件为index.php,内容为: <?php // +-------------- ...

随机推荐

  1. Office版本问题0x80029C4A

    说来奇怪,以前运行正常的程序(涉及excel表格输出),现在运行失败了,一调试,发现了如下问题: 无法将类型为"Microsoft.Office.Interop.Excel.Applicat ...

  2. Microsoft Dynamics CRM 2011/2013 JS操作集锦

    1.Xrm.Page.context用户ID:getUserId()用户角色:getUserRoles()用户语言:getUserLcid()组织名称:getOrgUniqueName()组织语言:g ...

  3. Add a file to a Document Library and update metadata properties in a single method添加文档的方法

    private void AddFileToDocumentLibrary(string documentLibraryUrl, string filename, byte[] file_bytes, ...

  4. 2014年听写VOA50篇

    在沪江英语的VOA听写栏目上听写完成50篇,听写笔记PDF. 103.VOASP.2014奥巴马国情咨文(1-3).mp3 104.VOASP.2014奥巴马国情咨文(2-3).mp3 105.VOA ...

  5. Android项目实战(十四):TextView显示html样式的文字

    项目需求: TextView显示一段文字,格式为:(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色. 一开始我想的是用(转) SpannableStr ...

  6. 第一个JSP程序

    本文介绍如何写出第一个JSP程序 1.配置服务器 (1)在eclipse中选择Server视图,(ps:很多童鞋说找不到Server,那是因为eclipse的版本问题,请下载JEE版本的eclipse ...

  7. UITextField 基本属性使用

    //设置文本框 透明度 tf.alpha = ; //设置文本颜色 tf.textColor = [UIColor orangeColor]; //设置文本文字 格式 tf.font = [UIFon ...

  8. Effective Java 04 Enforce noninstantiability with a private constructor

    A class can be made noninstantiable by including a private constructor. // Noninstantiable utility c ...

  9. 什么是purge操作

    要明白什么清空(purge)操作,你得明白什么是事务的多版本控制,即MVCC(multi-version concurrency control).Innodb为了实现MVCC, 需要在表空间内保存老 ...

  10. jenkins忘记管理密码处理方式

    进入/var/lib/jenkins/  用vim编辑 config.xml文件 找到useSecurity部分 将true改成false      并且删除下面的 授权部分 保存推出 3.从新进入 ...