【问题标题】:Build android ELF binary with nasm?用 nasm 构建 android ELF 二进制文件?
【发布时间】:2014-08-10 17:06:30
【问题描述】:

我正在尝试为 Android 编写一些汇编代码。通常我会使用nasm,但它似乎根本不支持Android (ARM)

valid output formats for -f are (`*' denotes default):
  * bin       flat-form binary files (e.g. DOS .COM, .SYS)
    ith       Intel hex
    srec      Motorola S-records
    aout      Linux a.out object files
    aoutb     NetBSD/FreeBSD a.out object files
    coff      COFF (i386) object files (e.g. DJGPP for DOS)
    elf32     ELF32 (i386) object files (e.g. Linux)
    elf64     ELF64 (x86_64) object files (e.g. Linux)
    elfx32    ELFX32 (x86_64) object files (e.g. Linux)
    as86      Linux as86 (bin86 version 0.3) object files
    obj       MS-DOS 16-bit/32-bit OMF object files
    win32     Microsoft Win32 (i386) object files
    win64     Microsoft Win64 (x86-64) object files
    rdf       Relocatable Dynamic Object File Format v2.0
    ieee      IEEE-695 (LADsoft variant) object file format
    macho32   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
    macho64   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
    dbg       Trace of all info passed to output stage
    elf       ELF (short name for ELF32)
    macho     MACHO (short name for MACHO32)
    win       WIN (short name for WIN32)

它们似乎都与 ARM 无关,我错了吗?

【问题讨论】:

  • 我将引用 NASM 手册:“Netwide 汇编器,NASM,是一个 80x86 和 x86-64 汇编器,专为可移植性和模块化而设计”。您必须使用 ARM 汇编程序,例如 Android NDK 中包含的汇编程序。
  • 但在某种意义上你是对的:x86-64 和 IA-32 是两种完全不同的架构,那么为什么不是第三种呢? NASM 只能同时支持两者,因为它们向后兼容。其他选项只是容器选择(ELF,Mach-O,PE,...)。似乎 GNU 的 as 做到了?
  • 另见维基百科上的Comparison of Assemblers

标签: android arm nasm


【解决方案1】:

你是对的:NASM 不支持 ARM。

有一个非常简单的原因:ARM 汇编与任何 x86 汇编无关。程序集链接到它所针对的硬件架构。汇编指令是实际处理器指令集的助记符,而 ARM 指令集与 x86 指令没有任何共同之处,因为 ARM 架构不兼容 x86。

为 x86 编写的任何汇编代码都不能在 ARM 上使用。这就是开发高级语言(例如 C)的原因。

【讨论】:

    【解决方案2】:

    NASM支持 x86/64 架构。 ARM 是一个完全不同的架构。您引用的列表是 NASM 能够将组装的 x86/64 代码存储到其中的文件格式列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2017-10-11
      • 2013-03-20
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多