哎呀,发现自己不会用模块的方式用kprobe啊,弱爆了
在内核外面编译模块,会报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啊,弱爆了的更多相关文章
- 架设lamp服务器后,发现未按照 Apache xsendfile模块,
今天在架设lamp服务器后,发现apache 未按照xsendfile模块,于是查找资料按照如下: 安装apache xsendfile模块yum install mod_xsendfile
- [嵌入式开发板]iTOP-4412以模块的方式编译驱动
本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...
- Python模块调用方式详解
Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...
- 【Android】还原“微信”apk中的“发现”和“我”两个模块
先下载一个微信apk,以压缩包的形式打开,对比微信界面,找出我们需要的素材. 以下两个模块的还原完全采用RelativeLayout相对布局. 按钮效果的实现 点击对应版块,将有点击效果.这可以通过修 ...
- led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)
跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐.教程有三种方法: 1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来.但是需要考虑左移到最后一位时需要自己再写个赋值语 ...
- dubbo模块组织方式
dubbo源码版本:2.5.4 阿里通过maven将dubbo的36个模块组织成了一个项目,各个模块结构如下: -------------------------------------------- ...
- python 装饰器、递归原理、模块导入方式
1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...
- 调试和开发npm模块的方式
ln -s(软连接) 假设my-project是运行npm模块的项目,vue-router是我们需要调试的npm模块 将vue-router下载到与my-project同级目录中. git clone ...
- ThinkPHP 多应用多模块建立方式
ThinkPHP3.2.2及以后版本同一应用多模块和多应用多模块的设计已经比以前的版本更加简单快捷. 注:入口文件为index.php,内容为: <?php // +-------------- ...
随机推荐
- .NET破解之100%营销QQ辅助软件【更新】
应网友要求,更新一个以前的版本,效果如下: 更改方法 修改一:更改对象的可访问性 Assembly: RWXComLibrary, Version=2.1.0.3 Name: RWXComLibrar ...
- Atitit.json xml 序列化循环引用解决方案json
Atitit.json xml 序列化循环引用解决方案json 1. 循环引用1 2. 序列化循环引用解决方法1 2.1. 自定义序列化器1 2.2. 排除策略1 2.3. 设置序列化层次,一般3级别 ...
- Oracle SQL Tips
左连接的同时只输出关联表的一条记录 WITH X AS (SELECT 1 ID FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL ...
- Android项目实战(五):TextView自适应大小
对于设置TextView的字体默认大小对于UI界面的好看程度是很重要的,小屏幕设置的文字过大或者大屏幕设置的文字过小都造成UI的不美观 现在就让我们学习自适应大小的TextView控件,即当文字长度变 ...
- IOS UILabel 根据内容自适应高度
iOS Label 自适应高度 适配iOS7以后的版本 更多 self.contentLabelView = [[UILabel alloc] init]; self.contentLabelVie ...
- 【原】训练自己haar-like特征分类器并识别物体(1)
本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本 ...
- redis-集群(cluster)扫盲篇(一)
什么是redis的集群 按我个人的理解,redis集群就是实现多个redis节点之间进行数据的共享. 集群有什么好处: 将数据自动split到多个节点进行存储. 当集群中的一部分节点失效或者无法进行通 ...
- Jmeter调试工具---Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- 《只是为了好玩:Linux之父林纳斯自传》
<只是为了好玩:Linux之父林纳斯自传> 基本信息 作者: (美)Linus Torvalds David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:978 ...
- 大写金额字符串生成 C#实现
思路: 中文对金额的描述以四位为一组, 只考虑一万亿以内的数字则每组内以千.百.十和[亿\万\元]区分各位 连续的零按一个处理,组内最低位的零可略去 无角无分说整,有角无分只说角,无角有分说零X分,有 ...