开发者社区 问答 正文

在ASM中调用函数时出现SegFault

我开始学习在汇编中调用函数。我在互联网上关注了很多教程,并对它进行了一些修改。

但是它并没有真正按预期工作。

.data
 hello:  .ascii "hello everyone\n"
 len= . - hello
 .text

.global _start

exit:
       mov %r1,#0
       mov %r2,#0
       mov %r0, #0
       mov %r7, #1
       swi #0

println:
        mov %r7, #4
        swi #0
        mov %pc, %lr
        bx %r7
_start:
        ldr %r1, =hello
        ldr %r2, =len
        b println
        b exit

然后输出

hello everyone
Segmentation fault
我```  
不知道我哪里错了。

展开
收起
祖安文状元 2020-01-05 19:09:53 459 分享 版权
1 条回答
写回答
取消 提交回答
  • 对于函数调用,请使用bl(分支和链接)指令。设置lr为包含寄信人地址。您的代码使用b(分支)而不是bl,因此lr未设置并且从返回println到不可预测的地址,可能会导致程序崩溃。

    要解决此问题,请使用bl而不是b进行函数调用:

    bl println
        bl exit
    
    2020-01-05 19:10:04
    赞同 展开评论
问答分类:
问答地址: