【问题标题】:What is the difference between android art elf and Linux elf files?android art elf 和 Linux elf 文件有什么区别?
【发布时间】:2016-06-10 16:44:07
【问题描述】:

在 ART wiki 中有描述: https://en.m.wikipedia.org/wiki/Android_Runtime?_e_pi_=7%2CPAGE_ID10%2C1898354483 ,即 ART 在安装时将 apk 文件编译为 ELF 文件。

GNU/Linux 上的 GCC 也创建了 ELF 文件作为输出,最近取代了 a.out 格式。

我知道这两种环境中的 API 和架构存在差异,但这两种格式是否存在任何结构或其他显着差异?

如果架构相同(由于 android 已移植到 x86),这些格式是否相互兼容?

或者这两种文件格式完全不同?

【问题讨论】:

  • 解释是here 6:30 - 10:00

标签: android linux gcc runtime elf


【解决方案1】:

自制解释:在PDF (Dalvik and ART) 中,您会发现“OAT 文件实际上嵌入在 ELF 对象文件中”(在 PDF 的第 16 页上,您可以看到 OAT 结构)。文件结构与wiki 相同。这是可能的,因为ELF“设计灵活且可扩展,并且不受任何特定处理器或架构的约束”。

来自elf format on wikipedia:使用 Android Runtime (ART),自 Android 5.0 “Lollipop”以来的默认设置,所有应用程序在安装时都会编译为本机 ELF 二进制文件。

结论:你的问题的答案是gcc elf和android elf是相同的文件格式。有关格式的更多信息,请访问 wiki

更新

“如果架构相同,这些格式是否相互兼容”

Readelf 用于 android oat 文件(使用我拥有的应用程序之一检查)显示 oat 文件类型为“DYN(共享对象文件)”。如果您的项目使用 JNI 库,您可以看到它类似于 .so 文件。由于“仿生系统库函数和动态链接器”(在 android 中使用),即使为相同的架构构建这些 elf 文件也不兼容通常的 GNU/Linux elf 文件。有关它们不兼容的原因的更多描述,您可以找到here。仿生在wiki

【讨论】:

  • 如果架构相同(由于 android 已移植到 x86),这些格式是否相互兼容?.. 问题尚未得到解答
  • 我在更新问题时添加了更多内容(没有在 cmets 中发布,因为我试图添加更多在 cmets 中看起来很尴尬的描述)。
猜你喜欢
  • 2011-01-26
  • 2021-02-17
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多