从共享对象调用主可执行文件中的函数
我必须从加载了 LD_PRELOAD 的共享库调用主可执行文件中的函数。
可执行文件导出所有符号并包含调试信息。不幸的是我无法访问它的源代码。
目前,我在尝试加载该共享库时遇到未定义的符号错误。 有办法做到这一点吗?
附: 目标平台是FreeBSD/x86。
I have to call functions in the main executable from a shared library loaded with LD_PRELOAD.
The executable exports all symbols and contains debug information. Unfortunately I don't have access to it's source code.
Currently I'm getting undefined symbol errors when trying to load that shared library.
Is there a way to do this?
PS:
Target platform is FreeBSD/x86.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过执行 typedef 创建函数指针并使用“dlsym()”来获取地址吗
的符号。然后您可以像普通函数一样通过函数指针调用该函数
函数调用。注意:您不需要 dlopen(),因为主可执行文件已导出符号
被加载到进程地址空间。
原型:
假设导出的函数是:
您的函数指针:
在您的代码中:
Can you create a function pointer by doing a typedef and use 'dlsym()' to get the address
of the symbol. You can then invoke the function through the function pointer like a normal
function call. Note: You do not need dlopen() since the main executable with symbols exported
is loaded into process address space.
Prototype:
Assume the exported function is:
Your function pointer:
In you code:
...应该可以解决问题。
有关 --export-dynamic 的文档
...should do the trick.
Documentation on --export-dynamic