在ASM中调用函数时,segfault



我开始学习呼叫汇编中的函数。我在互联网上遵循了很多教程,并对它进行了一些修改。

,但它并不是真正正常的。

.data
 hello:  .ascii "hello everyonen"
 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

我不知道我在哪里错了。

用于函数调用,使用bl(分支和链接)指令。这将设置lr以包含返回地址。您的代码使用b(分支)而不是bl,因此未设置lr,并且从println返回到一个不可预测的地址,可能崩溃了您的程序。

要解决此问题,请使用bl代替b进行函数调用:

    bl println
    bl exit

相关内容

  • 没有找到相关文章