查看符号表

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

把符号表加载进去,就能够通过kasan的报错信息看源码出错的信息

编写一个内核模块

编写一个内核模块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.oall:    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

make后生成test.ko文件,用insmod加载内核文件
sudo insmod test.ko
卸载模块能够应用
sudo rmmod mymodule
如果模块卸载胜利,能够应用 lsmod 命令查看已加载的模块列表,应该不再蕴含该模块。应用dmesg查看内核输入