0

我正在尝试在程序集中编写一个可从 Objective-C 代码调用的函数。我通过设置%rax和直接返回得到了简单的结果,但是当我尝试使用堆栈来存储局部变量时,我得到EXC_BAD_ACCESS. 有人可以看看这个并告诉我出了什么问题吗?我的程序集如下所示:

.global _fn
_fn:
pushq %rbp
movq %rsp, %rbp
subq 0x8, %rsp
addq 0x8, %rsp
popq %rbp
ret

Xcode 转储此内容并指示崩溃发生在sub 0x8,%rsp我从以下位置调用fnmain

0x0000000100020000  <+0000>  push   %rbp
0x0000000100020001  <+0001>  mov    %rsp,%rbp
0x0000000100020004  <+0004>  sub    0x8,%rsp
0x000000010002000c  <+0012>  add    0x8,%rsp
0x0000000100020014  <+0020>  pop    %rbp
0x0000000100020015  <+0021>  retq
4

1 回答 1

3

仅仅从 8 中减去rsp不应导致异常。

您很可能需要在常量前面加上美元符号。如果不这样做, (g)as 会将这些数字视为相应地址的内存操作数。

在 x86 平台上访问地址 8 处的内存通常与 NULL 指针取消引用一样好。

于 2012-08-22T14:27:24.110 回答