android - que - manual nasm
Construir el binario ELF de Android con nasm? (2)
Estoy tratando de escribir algún código ensamblar para Android. Normalmente lo haría con nasm
, pero no parece ser compatible con Android (ARM)
en absoluto:
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)
Ninguno de ellos parece estar relacionado con ARM, ¿estoy equivocado?
Tiene razón: NASM no es compatible con ARM.
Hay una razón muy simple: el ensamblaje ARM no tiene nada que ver con ningún ensamblaje x86. Un ensamblaje está vinculado a la arquitectura de hardware para la que está hecho. Las instrucciones de ensamblaje son mnemónicos para el conjunto de instrucciones del procesador real, y el conjunto de instrucciones ARM no tiene nada en común con la instrucción x86, porque la arquitectura ARM no es compatible con x86.
Cualquier código de ensamblaje escrito para x86 no se puede usar en ARM. Esta es la razón por la cual se desarrollaron idiomas de nivel superior (como C).
NASM solo es compatible con las arquitecturas x86 / 64. ARM es una arquitectura totalmente diferente. La lista a la que se refiere es una lista de formatos de archivo en los que NASM puede almacenar el código ensamblado x86 / 64.