如何从C中的function's pointer获取函数名称?
编辑:实际情况是:我正在编写一个Linux内核模块,并且正在调用内核函数。其中一些函数是指针,我想在内核源代码中检查该函数的代码。但是我不知道它指向哪个功能。我认为可以这样做是因为,当系统发生故障(内核崩溃)时,它将在屏幕上打印出具有函数名称的当前调用堆栈。但是,我想我错了……是吗?
最佳答案
没有其他帮助,这是不可能直接实现的。
你可以:
然而,后者是困难的,并且不可移植。该方法将取决于操作系统的二进制格式(ELF,a.out,.exe等),还取决于链接程序进行的任何重定位。
编辑:既然您已经解释了实际的用例,那么答案实际上并不难。内核符号表可在
/proc/kallsyms
中找到,并且有一个用于访问它的API:#include <linux/kallsyms.h>
const char *kallsyms_lookup(unsigned long addr, unsigned long *symbolsize,
unsigned long *ofset, char **modname, char *namebuf)
void print_symbol(const char *fmt, unsigned long addr)
出于简单调试的目的,后者可能会完全满足您的需要-它获取地址,对其进行格式设置并将其发送给
printk
,或者您可以将printk
与%pF
格式说明符一起使用。关于c - 如何从Linux内核中的函数指针获取函数名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/351134/