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