Как написать программу на языке ассемблера 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, и не могу увидеть код и установить точки останова.

Ответы на вопрос(1)

Ваш ответ на вопрос