简介
在内核中维护者一张符号表,记录了内核中所有的符号(函数、全局变量等)的地址以及名字,这个符号表被嵌入到内核镜像中,使得内核可以在运行过程中随时获得一个符号地址对应的符号名。而内核代码中可以通过 printk("%pS\n", addr) 打印符号名。
本文介绍内核符号表的生成和查找过程。
查找
cat /proc/kallsyms | more
示例代码
//CoreCodeTable.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
int add_int(int a, int b)
{
return (a + b);
}
int sub_int(int a, int b)
{
return (a - b);
}
EXPORT_SYMBOL(add_int);
EXPORT_SYMBOL(sub_int);