ELF共享库可移植性

时间:2016-11-17 15:05:28

标签: shared-libraries elf

想象一下,我有一个ELF格式的共享库,它只导出一个具有确定调用约定的确定符号(入口点),并且根本不导入任何符号。

我可以在不同的UNIX风格(Linux,FreeBSD,Solaris)中使用dlopen / dlsym / dlclose这个共享库吗?

2 个答案:

答案 0 :(得分:2)

  

我可以在不同的UNIX风格(Linux,FreeBSD,Solaris)中使用dlopen / dlsym / dlclose这个共享库吗?

假设你的图书馆是完全独立的,不会调用任何外部例程,也不会发出任何系统调用...答案仍然是否定的。

在ELF标头e_ident[EI_OSABI]字节中,您将拥有ELFOSABI_GNUELFOSABI_FREEBSDELFOSABI_SOLARIS之一。加载器将(或至少应该)拒绝为{“1}}为”错误“操作系统构建的库的尝试。

但是,如果您修补一个字节以匹配当前操作系统,那么dlopen可能会有效。

答案 1 :(得分:0)

不,ELF加载器和ELF文件的约定在操作系统和用于与内核交互的系统调用之间是不同的。

可以编辑文件以更改加载程序,以便FreeBSD或Solaris加载程序接受它,如果你只使用最小的subse,可能加载但是它& #39;你不太可能从中得到很多东西,除非它只是一大堆纯粹的功能。