查看符号表
编译好的内核的符号表通常保留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查看内核输入