Начиная изучать сборку, мне был предоставлен код сборки Hello World, созданный во время класса в Linux. Я хотел бы заставить его работать для 64-разрядной Mac OS X.
code.asm
SECTION .data
hola: db "Hola!",10
tam: equ $-hola
SECTION .text
global main
main:
mov edx,tam
mov ecx,hola
mov ebx,1
mov eax,4
int 0x80
mov ebx,0
mov eax,1
int 0x80
Это то, что я делаю:
nasm -f macho32 -o object.o code.asm
gcc -m32 -o program object.o
Что мне говорит:
Undefined символы для архитектуры i386: "_main", на которые ссылаются: начало в crt1.10.6.o ld: символ (-ы) не найден для архитектуры i386
В поисках этой ошибки я нашел этот вопрос: nasm и gcc: 32-разрядная ссылка не удалась (64-битная Mac OS X)
Один ответ говорит
Проблема, с которой вы сталкиваетесь, заключается в том, что вы создаете 32-разрядный Linux (ELF) объектный файл, который несовместим с форматом объекта Mac OS X. Попробуйте переключить '-f elf' на '-f macho32'.
Но я определенно использую -f macho32
. Итак, какова будет проблема?