gpt4 book ai didi

linux - 在 asm 中调用函数时出现段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:00 26 4
gpt4 key购买 nike

我开始学习在汇编中调用函数。我引用了网上的很多教程并对其进行了一些修改。

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

.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

我不知道我哪里错了。

最佳答案

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

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

    bl println
bl exit

关于linux - 在 asm 中调用函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55263305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com