我可以在 Linux 上动态加载可执行文件吗?
我编写了一个小测试框架,它使用“nm”来检查共享库并查找测试函数。然后,我使用 Python 的 ctypes 库动态加载共享对象并执行测试函数。有没有办法用可执行文件来做到这一点?当我在可执行模块上尝试相同的技巧时,Python 报告它无法动态加载可执行文件。
I wrote a little testing framework that uses 'nm' to inspect shared libraries and look for test functions. I then use Python's ctypes library to dynamically load the shared object and execute the test functions. Is there a way to do this with an executable? When I tried the same trick on an executable module Python reported that it could not dynamically load an executable.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果这是您自己的应用程序,您可以重新安排构建,以便您的可执行文件只是
main() { real_main(); }
和real_main()
位于libapp.so
中。然后您可以使用现有代码测试libapp.so
。如果可以加载另一个可执行文件,则可能需要加载 ld.so 并让它完成工作。如果您运行
/lib/ld-linux.so
(在 Linux 上),它将打印一个包含信息的节。If this is your own application you could rearrange the build so your executable is only
main() { real_main(); }
andreal_main()
is inlibapp.so
. Then you could testlibapp.so
with your existing code.If it's possible to load another executable it probably involves loading
ld.so
and getting it to do the work. If you run/lib/ld-linux.so
(on Linux) it will print a stanza with information.尝试使用
-pie
选项链接可执行文件(如果有可能的话)。(在此功能请求上找到此选项,以添加对
dlopen<的支持/code> 可执行文件 -
dlopen
用于加载共享对象)。Try linking the executable with the
-pie
option (if you have the possibility to do so).(found this option on this feature request for adding support to
dlopen
an executable --dlopen
is what is used to load a shared object).