запустить 32-битную сборку на 64-битном процессоре с Mac OS X
У меня проблема с запуском 32-битной сборки на моем 64-битном Mac под управлением OS X 10.9.5. У меня также установлен NASM 2.11.08. Я в настоящее время читаю на языке ассемблера Step by Step Джеффа Дюнтманна. В книге он указывает инструкции для 32-битной сборки в операционной системе Linux. Как мне запустить эту программу на моем 64-битном компьютере Mac OS X?
; 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
Я пытался собрать его с
nasm -f elf -g -F stabs eatsyscall.asm
Затем я пытаюсь связать это с
ld -o eatsyscall eatsyscall.o
но я получаю эту ошибку
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
Это должно бежать, верно? Я думал, что 64-разрядные процессоры Intel способны работать с 32-разрядными программами. Или нет способа запустить программу сборки, написанную для 32-битных систем Linux на 64-битном Mac?
Нужно ли устанавливать какой-то набор 32-битных библиотек, чтобы можно было связать этот файл? Должен ли я использовать что-то кроме NASM, например, GCC? Или сама программа написана неправильно. Спасибо за помощь!