2017-01-04 1 views
0

, 내가 노력하고있어 간단한 응용 프로그램을 컴파일 할 수 없습니다 :나는 리눅스 아치 64이 컴파일하기 위해 노력하고있어

section .text 
global _start 
_start: 
     mov edx, len 
     mov ecx, msg 
     mov ebx, 1 
     mov eax, 4 
     int 0x80 

     mov eax, 1 
     int 0x80 

section .data 
msg db 'hi123', 0xa 
len equ $ - msg 

그리고

$ nasm -f elf test1.asm 
$ ld -s -o test1 test1.o 

그러나 오류 :

/usr/bin/ld: i386 architecture of input file `test1.o' is incompatible with i386:x86-64 output 
+4

가능한 중복 http://stackoverflow.com/questions/30184929/use-ld-on -64 비트 플랫폼에서 32 비트 실행 가능) –

+0

링커에서 64 비트 바이너리를 생성하도록 지시했지만 어셈블리 코드가 32 비트 용으로 어셈블되었습니다. '-m elf_i386' 플래그를 링커에 전달하십시오. –

+0

여기에도 중복 됨 http://stackoverflow.com/questions/19200333/architecture-of-i386-input-file-is-incompatible-with-i386x86-64 –

답변

0

x86_64에서 32 비트 응용 프로그램을 링크 할 때 에뮬레이션을 elf_i386으로 설정하면 올바른 elf 형식이 제공됩니다. 예를 들어, nasm -f elf file.asm -o file.o를 사용하여 어셈블러 응용 프로그램을 컴파일하면 링크 명령은 ld -m elf_i386 -o exename file.o입니다.

그래서 이것을 사용하는 대신

nasm -f elf test1.asm 
ld -m elf_i386 -o test1 test1.o 
([32 비트 실행 파일을 생성하는 64 비트 플랫폼에서 사용 LD]의
관련 문제