我必须从加载了 LD_PRELOAD 的共享库调用主可执行文件中的函数。
可执行文件导出所有符号并包含调试信息。不幸的是我无法访问它的源代码。
目前,我在尝试加载该共享库时遇到未定义的符号错误。
有没有办法做到这一点?
附:
目标平台是FreeBSD/x86。
您可以通过执行 typedef 创建函数指针并使用“dlsym()”来获取地址吗
的符号。然后您可以像普通函数一样通过函数指针调用该函数
函数调用。注意:您不需要 dlopen(),因为主可执行文件已导出符号
被加载到进程地址空间。
原型:
void *dlsym(void *handle, const char *symbol);
假设导出的函数为:
int foo(char *arg);
你的函数指针:
typedef (int)(*fooPtr)(char *);
在你的代码中:
/* You can send NULL for first argument */
fooPtr fp = dlsym(NULL, "foo");
assert(0 != fp);
int ret = fp("hello world");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)