可执行格式有啥区别?

Posted

技术标签:

【中文标题】可执行格式有啥区别?【英文标题】:What is the difference between executable formats?可执行格式有什么区别? 【发布时间】:2016-03-29 19:08:31 【问题描述】:

PE、ELF 和 Mach-O 之间有什么主要区别吗?我的意思是,一个人有其他人没有的能力吗?一个人可以携带比其他人更多的信息吗?还是它们只是相同信息的不同容器格式? 我对此不是很了解,但在我看来,它们都带有文本(代码)部分、已初始化和未初始化的数据部分等,以及重定位、符号、字符串、导入和导出表。

我不是在问细微的差异,例如格式 X 可以拆分数据部分,或者格式 Y 可以在硬件中更有效地解析。 我问的是主要差异,这样它们可能会影响新通用操作系统的选择。或者,如果一个平台有一个适用于所有 3 种格式的加载器,那么只需“重新打包”这些部分并将表格重写为新格式,就可以轻松地将一种格式转换为另一种格式。

【问题讨论】:

【参考方案1】:

Mach-O 来自于 1985 年的 CMU Mach。它被 NeXT 和 Apple 采用。 PE 来自于 1993 年的 Microsoft Windows NT 3.1。ELF 来自最迟 1993 年的 ATT 的 System V。这些是的 32b 格式,后来扩展到 64b。添加了字段并扩展了枚举,但它们的结构保持不变。它们的主要区别在于 Mach-O 是 OSX+ios 的基础; PE 是 Windows 的基础;并且 ELF 是 Linux、FreeBSD 的基础...... ELF 在 Windows 上也受支持,Windows 子系统用于 Linux。每个都支持动态库、PIE、ASLR,...。您不会根据功能选择一个,而是选择一个目标,然后选择您的对象/可执行格式。 GNU ld 链接器处理所有三种格式,实际上 OSX 链接器是 ld 的分叉版本。

【讨论】:

以上是关于可执行格式有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

在已提交读事务与可重复读事务中执行单个选择查询有啥区别?

反编译和反汇编有啥区别?

SAP ABAP程序中这些程序类型都有啥区别呢?谢谢啦。

Binaries和Sourcetgz和zip的区别

VBS和JAVA和C++,有啥区别,有啥差距

dxcpl.exe是个啥程序,有啥用?