Linux 中特定“可执行格式”的加载程序是否可配置?

Linux 中特定“可执行格式”的加载程序是否可配置?

这个问题是继续 编译器如何在内存中布置代码, 这是在堆栈溢出处发布的。

我对ldLinux 中可用的 (GNU) 实用程序有几个问题。

每当一个程序在 shell 中运行时,例如./a.out,shell 就会使用ld来加载由 表示的程序a.out

  1. shell 如何知道它必须使用ld来加载a.out.它是否扫描a.out以检查它是否为 ELF 格式,如果是,则使用ld?它当然不能使用文件扩展名,因为没有规则以某种格式命名可执行文件。

  2. 实用程序是否可以ld加载以除 ELF 之外的任何其他可执行格式表示的程序?

  3. 假设我想出了自己的可执行格式,比如“xyz”,然后我编写了自己的加载程序abc来处理此类可执行文件。那么,有没有什么shell命令可以配置:“使用loaderabc加载以特定可执行格式“xyz”编译的程序?

答案1

  1. shell 不知道,内核知道。看Linux 上存在哪些类型的可执行文件?以及链接的文章了解详细信息。内核加载器加载二进制文件,如有必要,还加载其解释器(用于ld.so动态二进制文件)。

  2. 每个实现都是ld.so特定于格式的。

  3. 是的,可以通过向内核添加二进制加载器,或者使用binfmt_misc.看Mono 有何神奇之处?了解详情。

相关内容