32-Bit-Assembly auf 64-Bit-Prozessor mit Mac OS X ausführen
Ich habe ein Problem mit der Ausführung von 32-Bit-Assembly auf meinem 64-Bit-Mac unter OS X 10.9.5. Ich habe auch NASM 2.11.08 installiert. Ich lese gerade die Assemblersprache Step by Step von Jeff Duntemann. In dem Buch gibt er Anweisungen für die 32-Bit-Assembly unter einem Linux-Betriebssystem. Wie kann ich dieses Programm auf meinem 64-Bit-Mac OS X-Computer ausführen?
; eatsyscall.asm
SECTION .data ; Section containing initialised data
EatMsg: db "Eat at Joes!",10
EatLen: equ $-EatMsg
SECTION .bss ; Section containing uninitialized data
SECTION .text ; Section containing code
global _start ; Linker needs this to find the entry point!
_start:
nop ; This no-op keeps gdb happy...
mov eax,4 ; Specify sys_write call
mov ebx,1 ; Specify File Descriptor 1: Standard Output
mov ecx,EatMsg ; Pass offset of the message
mov edx,EatLen ; Pass the length of the message
int 80H ; Make kernel call
MOV eax,1 ; Code for Exit Syscall
mov ebx,0 ; Return a code of zero
int 80H ; Make kernel call
Ich habe versucht, es mit @ zusammenzusetz
nasm -f elf -g -F stabs eatsyscall.asm
Ich versuche dann, es mit @ zu verknüpf
ld -o eatsyscall eatsyscall.o
aber ich bekomme diesen Fehler
ld: warning: -arch not specified
ld: warning: -macosx_version_min not specified, assuming 10.6
ld: warning: ignoring file eatsyscall.o, file was built for unsupported file format ( 0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ) which is not the architecture being linked (x86_64): eatsyscall.o
Undefined symbols for architecture x86_64:
"start", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for inferred architecture x86_64
Dies sollte doch laufen, oder? Ich dachte, dass die 64-Bit-Prozessoren von Intel 32-Bit-Programme ausführen können. Oder gibt es keine Möglichkeit, ein Assembly-Programm für 32-Bit-Linux-Systeme auf einem 64-Bit-Mac auszuführen?
Muss ich einige 32-Bit-Bibliotheken installieren, um diese Datei verknüpfen zu können? Sollte ich etwas anderes als NASM wie GCC verwenden? Oder ist das Programm selbst nicht richtig geschrieben. Danke für die Hilfe