[英]segmentation fault at every assembly code
我正在嘗試在 raspberry pi 上學習匯編。但我無法開始,我編寫的每個代碼都會出現“分段錯誤”。
.text
.global _start
_start:
MOV R0, #2
SWI 0
此代碼出現分段錯誤。 即使我刪除了 MOV 行,它也會出現分段錯誤。
在樹莓派使用的 EABI 中, SWI 0
只是系統調用入口。 您仍然需要使用r7
指定您想要的功能。 所以,這樣的事情應該工作:
.text
.global _start
_start:
MOV R0, #2
MOV R7, #1 ; sys_exit
SWI 0
嘗試:
bx lr @ Exit if use gcc as linker
要么
mov r7, #1 @ Exit if use ld as linker
svc #0 @ Exit if use ld as linker
某些版本使用swi
,我使用ld
作為鏈接器成功使用svc
。 如果您使用gcc
作為鏈接器,則lr
寄存器返回到 OS。 確保在代碼開頭保存 lr 寄存器並在bx lr
之前恢復它。 有關詳細信息,請參閱將 C 函數與 ARM 匯編一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.