Kprobe】的更多相关文章

在内核外面编译模块,会报warning函数名undefined的错误,解决方法是把函数给export出来:EXPORT_SYMBOL 一直以来,用kprobe比较多的是kprobe event的用法,之前用过模块的方式编译过kprobe,但是感觉比较麻烦啊 今天要看看怎么用模块的方法简单编译kprobe: 如何单独编译内核模块 http://blog.sina.com.cn/s/blog_9011bd8c01015ms7.html 这个说得还是比较清楚,但是有几个东西还是不清楚呢,比如make设…
上一篇文章和大家简要说明了下kprobe到底应该怎样用,那么现在我们就揭开kprobe神秘的面纱,刨根问底,一睹kprobe的庐山真面目. kprobe的工作过程大致如下: 1)注册kprobe.注册的每个kprobe对应一个kprobe结构体,该结构中记录着插入点(位置),以及该插入点本来对应的指令original_opcode: 2)替换原有指令.使能kprobe的时候,将插入点位置的指令替换为一条异常(BRK)指令,这样当CPU执行到插入点位置时会陷入到异常态: 3)执行pre_handl…
kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的“基础设施”,4.0版本的内核中,强大的eBPF特性也寄生于kprobe之上,所以kprobe在内核中的地位就可见一斑了.本文想把kprobe的原理掰碎了给大家看. 怎么讲kprobe,我把整个讲述分为两部分,第一部分是kprobe怎么用,第二是kprobe的原理.本篇博客先说kprobe怎么用. kprobe是什么? 如何高效地调试内核?print…
代码来自于linux内核sample/kprobe kprobe_example.c /* * NOTE: This example is works on x86 and powerpc. * Here's a sample kernel module showing the use of kprobes to dump a * stack trace and selected registers when do_fork() is called. * * For more informati…
kprobe 的原理.编程接口.局限性和使用注意事项 本系列文章详细地介绍了一个Linux下的全新的调式.诊断和性能测量工具Systemtap和它所依赖的基础kprobe以及促使开发该工具的先驱DTrace并给出实际使用例子使读者更进一步了解和认识这些工具. 本文是该系列文章之一,它讲解了kprobe的原理.编程接口.局限性和使用注意事项并给出实际使用示例帮助读者理解和认识kprobe.本系列文章之二讲解了DTrace以及Systemtap与DTrace比较.本系列文章之三讲解了Systemta…
kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术. 利用kprobe技术,可以在内核绝大多数函数中动态插入探测点,收集调试状态所需信息而基本不影响原有执行流程. kprobe提供三种探测手段:kprobe.jprobe和kretprobe,其中jprobe和kretprobe基于kprobe实现,分别应用于不同探测场景中. 可以通过两种方式使用kprobe:第一种是编写内核模块,向内核注册探测点,探测函数根据需要自行定制,但是使用不方便: 第二种是使用kprobe…
参考  http://www.cnblogs.com/honpey/p/4575928.html kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的“基础设施”,4.0版本的内核中,强大的eBPF特性也寄生于kprobe之上,所以kprobe在内核中的地位就可见一斑了. kprobe是什么? 如何高效地调试内核?printk是一种方法,但是printk终归是毫无选择地全量输出,某些场景下不实用,于是…
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…
From: https://www.cnblogs.com/honpey/p/4575928.html kprobe原理解析(一) kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核调试工具(比如perf和systemtap)的"基础设施",4.0版本的内核中,强大的eBPF特性也寄生于kprobe之上,所以kprobe在内核中的地位就可见一斑了.本文想把kprobe的原理掰碎了给大家看. 怎么讲kprobe,我把整个讲述分为两部分,…
此处转载: 一.Kprobe简单介绍 kprobe是一个动态地收集调试和性能信息的工具,它从Dprobe项目派生而来,是一种非破坏性工具,用户用它差点儿能够跟踪不论什么函数或被运行的指令以及一些异步事件(如timer). 它的基本工作机制是:用户指定一个探測点.并把一个用户定义的处理函数关联到该探測点.当内核运行到该探測点时,对应的关联函数被运行.然后继续运行正常的代码路径. kprobe实现了三种类型的探測点: kprobes, jprobes和kretprobes (也叫返回探測点). kp…
介绍 <linux二进制分析>中提到了使用kprobe来写内核rootkit,还给出了一个简单的源码实现,这里看一下他的源码 kprobe kprobe的介绍可以看下面这几篇文章 介绍:https://www.cnblogs.com/honpey/p/4575928.html 原理:https://www.cnblogs.com/honpey/p/4575902.html 用法:https://blog.csdn.net/luckyapple1028/article/details/52972…
systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法. 什么是systemtap 假如现在有这么一个需求:需要获取正在运行的 Linux 系统的信息,如我想知道系统什么时候发生系统调用,发生的是什么系统调用等这些信息,有什么解决方案呢? 最原始的方法是,找到内核系统调用的代码,加上我们需要获得信息的代码.重新编译内核.安装.选择我们新编译的内核重启.这种做法对于内核开发人员简直是梦魇,因为一遍做下来至少得需要1个多小时,不…
声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的.也正因为这些错误,加深了我的学习深度. 最近因为在学习一些调试的技术,但是很少有提到如何在函数运行时实现函数替换的. 为什么会想到这一点?因为在学习调试时,难免会看到一些内核方面的调试技术,内核中的调试有一个kprobe,很强大,可以实现运行时的函数替换.其原理就是hook,钩子,但是学习了这个kp…
catalog . 引言 . proc文件系统 . 简单的文件系统 . sysfs 0. 引言 传统上,文件系统用于在块设备上持久存储数据,但也可以使用文件系统来组织.提供.交换并不存储在块设备上的信息,这些信息可以由内核动态生成,VFS的虚拟抽象层从架构上提供了这种功能,我们接下来着重讨论几种无持久存储的文件系统 . proc文件系统(proc filesystem) 它使得内核可以生成与系统的状态和配置有关的信息,该信息可以由用户和系统程序从普通文件读取,而无需专门的工具与内核通信(通过简单…
目录 . 简介 . 进程虚拟地址空间 . 内存映射的原理 . 数据结构 . 对区域的操作 . 地址空间 . 内存映射 . 反向映射 .堆的管理 . 缺页异常的处理 . 用户空间缺页异常的校正 . 内核缺页异常 . 在内核和用户空间之间复制数据 1. 简介 用户层进程的虚拟地址空间是Linux的一个重要抽象,它向每个运行进程提供了同样的系统视图,这使得多个进程可以同时运行,而不会干扰到其他进程内存中的内容,此外,它容许使用各种高级的程序设计技术,如内存映射,学习虚拟内存,同样需要考察可用物理内存中…
目录 . 应用场景 . Use Case Code Analysis . 和setjmp.longjmp有关的glibc and eglibc 2.5, 2.7, 2.13 - Buffer Overflow Vulnerability 1. 应用场景 非局部跳转通常被用于实现将程序控制流转移到错误处理模块中:或者是通过这种非正常的函数返回机制,返回到之前调用的函数中 . setjmp.longjmp的典型用途是异常处理机制的实现:利用longjmp恢复程序或线程的状态,甚至可以跳过栈中多层的函…
目录 . Linux exec指令执行监控Hook方案 . 在"Multi-Threadeed Program"环境中调用fork存在的风险 . Fork When Multi-Threadeed Program的安全设计原则 . Fork When Multi-Threadeed Program Deaklock Demo Code 1. Linux exec指令执行监控Hook方案 . 基于LD_PRELOAD技术的glibc API劫持Hook技术 ) 优点: 位于Ring3应用…
目录 . 引言 . Linux Security Module Framework Introduction . LSM Sourcecode Analysis . LSMs Hook Engine:基于LSM Hook进行元数据的监控获取 . LSM编程示例 . Linux LSM stacking 0. 引言 从最佳实践的角度来说,在Linux Kernel中进行安全审计.Access Control(访问控制)最好的方式就是使用Linux提供的原生的框架机制,例如 . Kprobe: Li…
目录 . sys_call_table:系统调用表 . 内核符号导出表:Kernel-Symbol-Table . Linux 32bit.64bit环境下系统调用入口的异同 . Linux 32bit.64bit环境下sys_call_table replace hook 1. sys_call_table:系统调用表 0x1: sys_call_table简介 sys_call_table在Linux内核中是在Linux内核中的一段连续内存的数组,数组中的每个元素保存着对应的系统调用处理函数…
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意的事项 0. 引言 中断是现代计算机体系结构的重要组成部分,我们回顾历史,现代体系结构的基本输入输出方式有三种 . 程序查询: CPU周期性询问外部设备是否准备就绪.该方式的明显的缺点就是浪费CPU资源,效率低下.但是在特定的场景下这种"程序查询"的方式还有有它的用武之地的 例如,在网络驱…
目录 . 内核态(ring0)内存申请和用户态(ring3)内存申请 . 内核态(ring0)内存申请:kmalloc/kfree.vmalloc/vfree . 用户态(ring3)内存申请:malloc/free . 内核内存申请原则 . 内核中分配物理地址连续的大段内存 1. 内核态(ring0)内存申请和用户态(ring3)内存申请  0x1: 差异点 在内核中申请内存和在用户空间中申请内存不同,有以下因素引起了复杂性,包括 . 内核的虚拟和物理地址被限制到1GB . 内核的内存不能PA…
目录 . 为什么要构建日志系统 . 通用日志系统的总体架构 . 日志系统的元数据来源:data source . 日志系统的子安全域日志收集系统:client Agent . 日志系统的中心日志整合系统:log server . 日志系统的后端存储系统:log DB . 日志系统搭建学习 1. 为什么要构建日志系统 log是管理员每日需要查看的文件记录.里面记载了大量系统正常和不正常的运行信息,这些信息对管理员分析系统的状况.监视系统的活动.发现系统入侵行为是一个相当重要的部分对于安全研究员来说…
目录 . The Purpose Of Rootkit . Syscall Hijack . LKM Module Hidden . Network Communication Hidden . File Hidden . Process Hidden . Hidden Port Remote Reverse Connections . Programe Replacing 1. The Purpose Of Rootkit Basically, the purpose of rootkit i…
目录 . 进程相关数据结构 ) struct task_struct ) struct cred ) struct pid_link ) struct pid ) struct signal_struct ) struct rlimit . 内核中的队列/链表对象 ) singly-linked lists ) singly-linked tail queues ) doubly-linked lists ) doubly-linked tail queues . 内核模块相关数据结构 ) st…
目录 . /proc简介 . 内核机制相关 . 进程信息 . 硬件设备相关 . 系统信息 . /dev简介 . 内存相关 1. /proc简介 在linux的根目录下有一个/proc目录,/proc文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在Linux内核空间和用户空间之间进行通信.在/proc文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的(即在我们执行指令的那一刹那才产生的) /proc文件系统包含…
linux源代码在https://www.kernel.org/就可以下.现在的稳定版本是3.16.3. 因为简历上有个项目是内核有关的,为了准备一下面试,还是要重温一下内核才行.最基本的,哪些文件在哪个项目总要知道吧... 为什么还没有offer.. tar没法直接角解压,只能先用xz解压,再用tar分开.整个压缩比还挺高的,xz文件是76.8MB,解压后是500多MB. root@xxj-VirtualBox:~# xz -d linux-.tar.xz root@xxj-VirtualBo…
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核的关键在于你的对内核的深刻理解. 一  调试前的准备 在调试一个bug之前,我们所要做的准备工作有: 有一个被确认的bug. 包含这个bug的内核版本号,需要分析出这个bug在哪一个版本被引入,这个对于解决问题有极大的帮助.可以采用二分查找法来逐步锁定bug引入版本号. 对内核代码理解越深刻越好,同…
下载: http://www.oschina.net/p/systemtap/ https://sourceware.org/systemtap/ftp/releases/   Linux 自检和 SystemTap (强大的内核调试工具) http://www.ibm.com/developerworks/cn/linux/l-systemtap/index.html SystemTap 是监控和跟踪运行中的 Linux 内核的操作的动态方法.这句话的关键词是动态,因为 SystemTap 没…
Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic.因此,在中断处理程序中,是不能使用有可能导致睡眠的函数(例如信号量等). 在中断发起的软中断中,其上下文环境有可能是中断上下文,同理,也不能调用可能导致睡眠的函数.软中断执行时,全局中断是打开的,而中断程序执行时,全局中断是禁止的. 软中断除了系统调度进入点,当软中断数量频繁时,内核中有一个专门的…
SystemTap 的架构 让我们深入探索 SystemTap 的某些细节,理解它如何在运行的内核中提供动态探针.您还将看到 SystemTap 是如何工作的,从构建进程脚本到在运行的内核中激活脚本. 动态地检查内核 SystemTap 用于检查运行的内核的两种方法是 Kprobes 和返回探针.但是理解任何内核的最关键要素是内核的映射,它提供符号信息(比如函数.变量以及它们的地址).有了内核映射之后,就可以解决任何符号的地址,以及更改探针的行为. Kprobes 从 2.6.9 版本开始就添加…