将可执行二进制文件转换为动态库

将可执行二进制文件转换为动态库

从功能上讲,二进制文件(如可以从 shell 执行的 ELF 二进制文件)与库有些相似,因为两者都是包含二进制形式的特定目标 ABI 的机器代码的文件。

差异是:

  • 可执行二进制文件具有一个明确定义的入口点(main()在 C 语言中)以及明确定义的签名(参数和返回值),而动态库可以具有任意数量的具有任意名称和签名的入口点,每个入口点都必须已知给想要使用它的呼叫者。
  • 可执行二进制文件在其自己的新创建的进程中运行,而动态库代码在调用者的进程(最初也是线程)中运行。

但在实现方面,我不知道文件格式有多么不同。

然而,理论上应该可以获取可执行二进制文件并将其转换为导出单个函数int main (int argc, char *argv[]).

从功能方面来看,我看到的唯一潜在障碍是可执行二进制文件期望成为进程的“老板”,而库函数显然不是——如果“老板”期望对某些资源进行独占控制(例如将第一个全局变量放置在硬编码的内存地址而不是动态分配空间),这会导致冲突并导致难以预测的行为。

问题:是否有任何工具可以将已编译的 ELF 二进制文件转换为动态库,该动态库可以从另一个进程调用并在另一个进程内运行?

相关内容