汇编函数中的EXC_BAD_ACCESS

时间:2012-08-22 14:13:03

标签: objective-c assembly

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

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

当我从sub 0x8,%rsp拨打fn时,Xcode会转储并指示崩溃时间为main

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

1 个答案:

答案 0 :(得分:3)

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

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

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