Estoy tratando de aprender a escribir lenguaje ensamblador para Mac OS de 64 bits. No tengo ningún problema con Mac OS de 32 bits y Linux de 32 bits y 64 bits.Cómo escribir el lenguaje ensamblador hello world program para 64 bit Mac OS X usando printf?
Sin embargo, Mac OS 64 bit es diferente y no pude entenderlo. Por lo tanto, estoy aquí para pedir ayuda.
No he tenido problemas al utilizar la llamada al sistema para imprimir. Sin embargo, me gustaría aprender cómo llamar a las funciones C utilizando el lenguaje ensamblador de 64 bits de Mac OS.
Por favor mirar el siguiente código
.data
_hello:
.asciz "Hello, world\n"
.text
.globl _main
_main:
movq $0, %rax
movq _hello(%rip), %rdi
call _printf
utilizo $ gcc -arch x86_64 hello.s
de montar y de enlace.
Genera código binario. Sin embargo, recibí un error de segmentación cuando lo ejecutaba.
Intenté agregar "subq $ 8,% rsp" antes de llamar a _printf, sigue teniendo el mismo resultado que antes.
¿Qué hice mal?
Por cierto, ¿hay alguna forma de depurar este código en Mac? Intenté agregar -ggdb o -gstab o -gDWARF, y $ gdb ./a.out, y no puedo ver el código y establecer puntos de interrupción.
buen artículo sobre convenciones de llamada x86_64: http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/ –
eax for vararg count: http://stackoverflow.com/questions/6212665, problemas de alineación: http://stackoverflow.com/questions/10324333, http://stackoverflow.com/questions/14000351, pregunta genérica: http://stackoverflow.com/questions/10857273 –