0
我正試圖編寫一個可從Objective-C代碼調用的程序集中的函數。通過設置%rax
並直接返回,我得到了簡單的結果,但是當我嘗試使用堆棧來存儲局部變量時,我得到了EXC_BAD_ACCESS
。有人可以看看這個,告訴我發生了什麼問題嗎?我的裝配是這樣的:彙編函數中的EXC_BAD_ACCESS
.global _fn
_fn:
pushq %rbp
movq %rsp, %rbp
subq 0x8, %rsp
addq 0x8, %rsp
popq %rbp
ret
Xcode中轉儲這一點,並表明飛機墜毀在sub 0x8,%rsp
當我打電話fn
從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
這幾乎肯定是答案。如果您運行代碼,請注意,EXC_BAD_ACCESS正在抱怨的地址是0x00000008。 –
+1 Mach-O加載器強制虛擬內存的底部頁面無法被用戶代碼訪問。這是用於捕獲空指針訪問的機制,但當然會在底部頁面上的所有位置上導致相同的異常 - 其中地址0x00000008爲1。 – JeremyP
乾杯,就是這樣。我應該更多地關注小字。 –