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