【发布时间】: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。