我可以在 Linux 上动态加载可执行文件吗?

发布于 2024-11-15 09:51:18 字数 138 浏览 2 评论 0原文

我编写了一个小测试框架,它使用“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

゛清羽墨安 2024-11-22 09:51:18

如果这是您自己的应用程序,您可以重新安排构建,以便您的可执行文件只是 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(); } and real_main() is in libapp.so. Then you could test libapp.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.

执笔绘流年 2024-11-22 09:51:18

尝试使用 -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).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文