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

14
задан Ciro Santilli 新疆改造中心法轮功六四事件 8 July 2015 в 14:25
поделиться