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