作者:Diting0x
CSysSec注: 本文来自Diting0x的个人博客,讲述在虚拟化平台下如何利用PVOPS框架来hook内核
转载本文请务必注明,文章出处:《Hook内核之PVOPS》与作者信息:Diting0x
pvops是做什么的? 简单地说,hook kernel.
利用pvops你可以自定义自己的write_cr3函数,你可以修改页表,追踪页表更新的信息,而这些听起来非常底层的操作,利用pvops都变得简单起来。
pvops接口来源于Xen项目,初衷是建立一个类虚拟化(para-virtualized)内核来适应于不同的hypervisor,当然也包括适应于非虚拟化平台。
pvops将类虚拟化操作分成一系列结构:pv_time_ops,pv_cpu_ops,pv_mmu_ops,pv_lock_ops和pv_irq_ops。
举个例子,x86系统中利用’MOV CR3’指令来加载页表。pvops将其替换为一个间接跳转到pv_mmu_ops -> write_cr3函数。 每种虚拟化系统,包括本地x86平台,对这些函数都有自己的实现。 对于x86平台,这些函数的实现只是简单地对原始函数指令的封装。比如对于pv_mmu_ops -> write_cr3函数,x86平台的具体实现为native_write_cr3函数:
|
|
pvops将本地底层的硬件指令通过pv_xxx_ops结构体替换为间接跳转函数。下面以pv_mmu_ops为例,详细分析其内部结构,pv_mmu_ops的定义为:(文中列出主要部分,完整定义,可参看pv_mmu_ops结构定义)
|
|
比如说你要在分配页表项的时候hook (write_cr3)函数, 可以将(write_cr3)函数赋值为自己的自定义函数。 默认情况下,内核中pvops框架中提供的自定义函数如下: (完整可参看 pv_mmu_ops函数定义)
|
|
接着定义的函数会被传入到这里:
|
|
至于PVOP_VCALL2具体做了什么,可以不必去关心。
完
转载本文请务必注明,文章出处:《Hook内核之PVOPS》与作者信息:Diting0x