查看符号表
编译好的内核的符号表通常保存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.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查看内核输出
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。