【发布时间】:2023-03-16 13:44:01
【问题描述】:
我正在尝试学习为 64 位 Mac OS 编写汇编语言。我对 32 位 Mac OS 以及 32 位和 64 位 Linux 都没有问题。
但是,Mac OS 64 位是不同的,我无法弄清楚。因此,我在这里寻求帮助。
使用系统调用打印没有问题。但是,我想学习如何使用 Mac OS 的 64 位汇编语言调用 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 调用约定的好文章:nickdesaulniers.github.io/blog/2014/04/18/…
标签: macos assembly 64-bit printf 32bit-64bit