gpt4 book ai didi

assembly - ARM:2 个 printfs 导致段错误

转载 作者:行者123 更新时间:2023-12-03 06:28:36 25 4
gpt4 key购买 nike

我为 ARM 编写了一个“Hello World”程序,并且运行良好。一旦我重复 printf 调用(打印“Hello World”两次),该程序就开始给出“段错误”。

这是带有两次 printf 调用的代码:

.extern printf
.global main

main:
push {ip,lr}
ldr r0, =test
bl printf
bl printf

mov r0, #0
pop {ip,pc}

test: .asciz "hello world\n"

有任何关于原因以及解决方法的线索吗?

最佳答案

ARM EABI 指定允许被调用者更改寄存器 r0-r3 和 r12,因此您的 r0 不再保存字符串的地址。事实上,它包含 printf 调用的返回值(在本例中为 12)。然后,您的下一个 printf 调用将尝试访问内存中地址 0xC 处的字符串,这会导致进程出现段错误。

要使双 printf 工作,您必须这样做:

ldr r0, =test
bl printf
ldr r0, =test
bl printf

关于assembly - ARM:2 个 printfs 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157346/

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