查看符号表

编译好的内核的符号表通常保存vmlinux中,符号表通过nm查看
nm -g vmlinux
image.png

把符号表加载进去,就可以通过kasan的报错信息看源码出错的信息
image.png

编写一个内核模块

编写一个内核模块test.c,该模块作用是判断CPU是否支持intel pt

#include <linux/module.h>
#include <asm/nmi.h>
#include <asm/page.h>
#include <asm/msr.h>
#include <asm/cpufeature.h>
#include <linux/kernel.h>
#include <linux/printk.h>

unsigned a, b, c, d;
#define BIT(x) (1ULL << (x))
#define PRINT_ERROR(msg) printk(KERN_INFO "[VMX-PT] Error:\t%s\n", (msg))

int init_module(void)
{
    cpuid_count(0x07, 0, &a, &b, &c, &d);
    //判断是否支持 Intel PT 技术的逻辑是,检查 CPUID 指令返回的寄存器 EBX 的第 25 位是否为 1,如果为 0,则表示不支持 Intel PT 技术
    if ((b & BIT(25)) == 0) {
        PRINT_ERROR("No PT support!");
        return -EIO;
    }
}

void cleanup_module(void)
{
    PRINT_ERROR("module unloaded!");
}

Makefile

obj-m += test.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

make后生成test.ko文件,用insmod加载内核文件
sudo insmod test.ko
卸载模块可以使用
sudo rmmod mymodule
如果模块卸载成功,可以使用 lsmod 命令查看已加载的模块列表,应该不再包含该模块。使用dmesg查看内核输出

image.png


白风之下
10 声望3 粉丝

« 上一篇
Docker逃逸