我正在尝试编写一个可以从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
答案 0 :(得分:3)
仅从rsp
减去8不应导致异常。
您很可能需要在常量前加上美元符号。如果不这样做,(g)将这些数字视为相应地址的内存操作数。
在x86平台上访问地址8的内存通常与空指针取消引用一样好。