libvmi虚拟机自省源码分析(一)

LibVMI是一个用于实时监控运行中虚拟机的C库,支持内存自省和硬件事件监视。本文深入剖析libvmi获取Linux内核符号表的流程,包括解析System.map、虚拟地址到物理地址的转换,以及涉及的内存读取机制。通过对vmi_init函数的分析,揭示了libvmi如何初始化并获取虚拟机信息,以便后续的内存操作。
摘要由CSDN通过智能技术生成

Libvmi概况

LibVMI是一个C库,它提供了对正在运行中的底层虚拟机的运行细节进行监视的功能,监视的功能是由观察内存细节,陷入硬件事件和读取CPU寄存器来完成的。这种方式被称作虚拟机自省(virtual machine introspection)

Libvmi原理

libvmi所提供的种种功能中,最主要的是内存自省功能,内存自省能允许用户从dom0监控(也就是读取内存数据)以及控制(也就是改写内存数据)操作系统。

用libvmi获取linux内核符号表

这里写图片描述

上图是通过libvmi获取内核符号的流程,主要有以下过程组成:
1. 应用程序请求查看内核符号。
2. libvmi通过系统的System.map获取内核符号的虚拟地址。
3. 找到虚拟地址所对应的内核页目录,并获取对应的页表。
4. 通过页表找到正确的数据页。
5. 数据页被返回给libvmi。
6. libvmi将数据返回给vmi应用程序。

用libvmi获取linux内核符号表的源码分析

首先来分析example下的map-symbol.c程序,这个程序可以在内存中找到指定的内核符号,并将内核符号所在的内存页打印出来。在分析源码的时候,我们尽可能减少无关紧要的代码,而只保留关键部分的代码进行分析。

/*map-symbol.c*/
#define PAGE_SIZE 1 << 12
int main(int argc, char **argv){
    /*创建一个vmi的实例*/
    vmi_instance_t vmi;
    ……
   
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值