2014-06-20 2 views
4

Android 용 코드를 작성하려고합니다. 보통 내가 nasm와 함께 할 거라고하지만 전혀 Android (ARM)를 지원하지 않는 것 : 그들의nasm과 함께 android ELF 바이너리를 빌드 하시겠습니까?

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이 관련이있는 것으로 보인다, 내가 잘못입니까?

+0

NASM 매뉴얼에서 인용 할 것입니다 : "Netwide Assembler, NASM은 ** 이동성과 모듈성을 위해 설계된 80x86 및 x86-64 어셈블러입니다 **". Android NDK에 포함 된 것과 같은 ARM 어셈블러를 사용해야합니다. – Michael

+0

하지만 당신은 맞습니다. x86-64와 IA-32는 전혀 다른 두 가지 아키텍처입니다. NASM은 역 호환이 가능하기 때문에 둘 다를 지원할 수 있습니다. 다른 옵션은 컨테이너 선택 (ELF, Mach-O, PE, ...)입니다. 그것은 GNU의'있는 그대로'그것을 보이지만? –

+0

Wikipedia의 [Assemblers 비교] (https://en.wikipedia.org/wiki/Comparison_of_assemblers)를 참조하십시오. – jww

답변

2

맞습니다 : NASM은 ARM을 지원하지 않습니다.

매우 간단한 이유가 있습니다. ARM 어셈블리는 x86 어셈블리와 아무 관련이 없습니다. 어셈블리는이를 위해 만들어진 하드웨어 아키텍처에 연결됩니다. 어셈블리 명령어는 실제 프로세서 명령어 세트에 대한 니모닉이며 ARM 명령어 세트는 x86 명령어와 아무 공통점이 없습니다. 이는 ARM 아키텍처가 x86과 호환되지 않기 때문입니다.

x86 용으로 작성된 어셈블리 코드는 ARM에서 사용할 수 없습니다. 이것이 상위 레벨 언어 (예 : C)가 개발 된 이유입니다.

1

NASM 은 x86/64 아키텍처 만 지원합니다. ARM은 완전히 다른 아키텍처입니다. 참조하는 목록은 NASM이 어셈블 된 x86/64 코드를 저장할 수있는 파일 형식의 목록입니다.

관련 문제