开发者社区> 问答> 正文

在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 431 0
1 条回答
写回答
取消 提交回答
  • 对于函数调用,请使用bl(分支和链接)指令。设置lr为包含寄信人地址。您的代码使用b(分支)而不是bl,因此lr未设置并且从返回println到不可预测的地址,可能会导致程序崩溃。

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

    bl println
        bl exit
    
    2020-01-05 19:10:04
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载