【发布时间】:2014-06-04 17:30:00
【问题描述】:
是否可以获得指向具有前缀的函数的函数指针?起初我以为 c 函数的名称在编译过程中丢失了。但随后,dlsym 返回指向指定名称的函数的指针。
所以如果有办法做这样的事情:
void * handle = dlopen(0, RTLD_NOW|RTLD_GLOBAL);
*(void **)(&fptr);
while(fptr = dlsym(handle, "prefix*")) {
fptr(args);
}
【问题讨论】:
-
只是为了迂腐:没有办法做这样的事情'In c'。您已经正确地注意到可能有一种方法可以在
上执行此操作。如果您具体了解该平台,您可能会得到更好的答案。 -
我已经标记为 posix,因为
dlsym和dlopen是 posix。 -
Linux 动态加载器提供了这些功能,手册页讨论了
dlsym()搜索符号表树。检查实现这些的库的源代码可能会揭示一种枚举树中所有符号的方法。 -
如果这完全是您的程序(因此您可以更改它的任何部分),您应该以简单的方式创建这些函数指针的数组。
-
我不确定您手动调用它们是什么意思。如果你知道他们的名字,你可以用通常的方式称呼他们。你为什么要按照你想要的方式去做?
标签: c posix function-pointers