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

时间:2011-06-14 16:22:19

标签: python c linux dynamic-linking

我写了一个小测试框架,它使用'nm'来检查共享库并查找测试函数。然后我使用Python的ctypes库动态加载共享对象并执行测试功能。有没有办法用可执行文件做到这一点?当我在可执行模块上尝试相同的技巧时,Python报告它无法动态加载可执行文件。

2 个答案:

答案 0 :(得分:3)

如果这是您自己的应用程序,则可以重新排列构建,以便您的可执行文件仅main() { real_main(); }real_main()位于libapp.so。然后,您可以使用现有代码测试libapp.so

如果可以加载另一个可执行文件,则可能需要加载ld.so并让它来完成工作。如果您运行/lib/ld-linux.so(在Linux上),它将打印一个包含信息的节。

答案 1 :(得分:1)

尝试将可执行文件与-pie选项相关联(如果您有可能的话)。

(在this feature request上找到此选项,用于添加对dlopen可执行文件的支持 - dlopen是用于加载共享对象的内容。)