Próbuję nauczyć się pisania języka asemblerowego dla 64-bitowego systemu Mac OS. Nie mam problemu z 32-bitowym systemem Mac OS oraz 32- i 64-bitowym systemem Linux.Jak napisać asemblerowy program assemblera dla 64-bitowego systemu Mac OS X przy użyciu printf?
Jednak wersja 64-bitowa Mac OS jest inna i nie mogłem tego rozgryźć. Dlatego jestem tutaj, aby poprosić o pomoc.
Nie mam problemu z wykorzystaniem wywołania systemowego do drukowania. Chciałbym jednak nauczyć się wywoływać funkcje języka C przy użyciu 64-bitowego języka asemblera systemu Mac OS.
Proszę spojrzeć na poniższy kod
.data
_hello:
.asciz "Hello, world\n"
.text
.globl _main
_main:
movq $0, %rax
movq _hello(%rip), %rdi
call _printf
używam $ gcc -arch x86_64 hello.s
montaż i łącza.
Generuje kod binarny. Jednak podczas uruchamiania go wystąpił błąd segmentacji.
Próbowałem dodać "subq 8 USD,% rsp" przed wywołaniem _printf, wciąż taki sam wynik jak poprzednio.
Co zrobiłem źle?
Nawiasem mówiąc, czy to sposób debugowania tego kodu na komputerze Mac? Próbowałem dodać -ggdb lub -gstab lub -gDWARF, i $ gdb ./a.out, i nie widzę kodu i ustawić punkty przerwania.
dobry artykuł na x86_64 konwencji numerem: http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/ –
eax dla liczby vararg: http://stackoverflow.com/questions/6212665, problemy z wyrównaniem: http://stackoverflow.com/questions/10324333, http://stackoverflow.com/questions/14000351, ogólne pytanie: http://stackoverflow.com/questions/10857273 –