Как написать программу на языке ассемблера hello world для 64-битной Mac OS X с использованием printf?
Я пытаюсь научиться писать на ассемблере для 64-битной Mac OS. У меня нет проблем с 32-битной Mac OS и 32-битной и 64-битной Linux.
Тем не менее, Mac OS 64 бит отличается, и я не мог понять. Поэтому я здесь, чтобы попросить о помощи.
У меня нет проблем с использованием системного вызова для печати. Однако я хотел бы узнать, как вызывать функции C, используя 64-битный язык ассемблера Mac OS.
Пожалуйста, посмотрите на следующий код
.data
_hello:
.asciz "Hello, world\n"
.text
.globl _main
_main:
movq $0, %rax
movq _hello(%rip), %rdi
call _printf
Я использую $ gcc -arch x86_64 hello.s
собрать и связать.
Он генерирует двоичный код. Тем не менее, я получил ошибку сегментации при запуске.
Я попытался добавить «subq $ 8,% rsp» перед вызовом _printf, но результат тот же, что и раньше.
Что я сделал не так?
Кстати, есть ли способ отладки этого кода на Mac? Я попытался добавить -ggdb или -gstab или -gDWARF и $ gdb ./a.out, и не могу увидеть код и установить точки останова.