我想學習爲64位Mac OS編寫彙編語言。我對32位Mac OS以及32位和64位Linux都沒有問題。如何使用printf編寫用於64位Mac OS X的彙編語言hello world程序?
但是,Mac OS 64位是不同的,我無法弄清楚。因此我在這裏尋求幫助。
我沒有問題使用系統調用來打印。但是,我想學習如何使用64位Mac OS彙編語言調用C函數。
請看下面的代碼
.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
組裝和鏈接。
它生成二進制代碼。但是,運行時出現分段錯誤。
我試着在調用_printf之前添加「subq $ 8,%rsp」,仍然和以前一樣。
我做錯了什麼?
順便說一句,任何方式來在Mac上調試此代碼?我嘗試添加-ggdb或-gstab或-gDWARF,並且$ gdb ./a.out,並且不能看到代碼並設置斷點。
在x86_64的調用約定好文章:http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/ – 2015-07-08 14:34:28
eax for vararg count:http://stackoverflow.com/questions/6212665,對齊問題:http://stackoverflow.com/questions/10324333,http://stackoverflow.com/questions/14000351,通用問題:http:/ /stackoverflow.com/questions/10857273 – 2015-07-08 15:01:47