LB4*_*B40 12 c gcc function-pointers
gcc中有一个魔术变量,它持有一个指向当前函数的指针吗?
我想有一种表包含每个函数指针的一组信息.
我知道有一个__func__变量包含当前函数的名称作为字符串但不作为函数指针.
这不是为了调用函数而是仅仅用作索引.
编辑 基本上我想做的是能够在执行当前函数之前运行嵌套函数(并且还捕获返回以执行某些操作.)基本上,这就像__cyg_profile_func_enter和__cyg_profile_func_exit(检测函数).但问题是这些仪器功能是全局的而不是功能专用的.
编辑
在Linux内核中,你可以使用unsigned long kallsyms_lookup_name(const char *name)
从include/linux/kallsyms.h
...请注意CONFIG_KALLSYMS
选项必须被激活.
这是一个获取调用者地址的技巧,它可能可以稍微清理一下。依赖GCC 扩展来获取标签的 value。
#include <stdio.h>
#define MKLABEL2(x) label ## x
#define MKLABEL(x) MKLABEL2(x)
#define CALLFOO do { MKLABEL(__LINE__): foo(&&MKLABEL(__LINE__));} while(0)
void foo(void *addr)
{
printf("Caller address %p\n", addr);
}
int main(int argc, char **argv)
{
CALLFOO;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
void f() {
void (*fpointer)() = &f;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13902 次 |
最近记录: |