PE,ELF和Mach-O之间是否存在重大差异?我的意思是,一个人有能力而其他人没有吗?其他人可以携带更多信息吗?或者它们只是相同信息的不同容器格式? 我对此并不是很了解,但在我看来,它们都带有文本(代码)部分,初始化和未初始化的数据部分等,以及重定位,符号,字符串,导入和导出表。
我不是在询问细微差别,例如格式X可以拆分数据部分,或者格式Y可以在硬件中更有效地解析。
我问的是主要的差异,这些差异会影响新通用操作系统的选择。或者,如果一个平台有一个所有3种格式的加载器,只需“重新打包”这些部分并将表重写为新格式,从一种格式转换到另一种格式是否微不足道。
答案 0 :(得分:1)
Mach-O来自1985年的CMU Mach。它被NeXT和苹果公司采用。 PE来自于1993年的Microsoft Windows NT3.1。ELF来自于1993年最新的ATT的SystemV。这些是 old 的32b格式,此后已扩展为64b。添加了字段并扩展了枚举,但它们的结构保持不变。它们的主要区别是Mach-O是OSX + iOS的基础。 PE是Windows的基础; ELF是Linux,FreeBSD等的基础。...Windows带有Windows子系统的Linux也支持ELF。每个都支持动态库,PIE,ASLR等。您不会根据功能选择一个,而是选择一个目标,然后选择目标/可执行格式。 GNU ld链接器可以处理所有三种格式,实际上OSX链接器是ld的分支版本。