gpt4 book ai didi

linux - ARM 汇编函数有问题?

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

我有一个用 ARM 汇编程序编写的简单函数。第一次运行时,一切正常(打印 BOOT\n)。但是,第二次执行该函数时,没有打印任何内容。

.globl __printTest
.text
.align 2

__printTest:
sub sp, #64 /* yes, I know this is too much */

mov r0, #66
str r0, [sp]
mov r0, #79
str r0, [sp, #1]
mov r0, #79
str r0, [sp, #2]
mov r0, #84
str r0, [sp, #3]
mov r0, #10
str r0, [sp, #4]

mov r0, #0
mov r1, sp
mov r2, #5

bl _write
add sp, #64

bx lr

可能是什么问题?我怀疑这会以某种方式搞砸缓冲区,使其不再有效。 Write 是一个函数,它使用 svc 指令在 Linux 上调用 write 系统调用。

最佳答案

问题是你没有保存lr

     bl _write
add sp, #64
bx lr

bl _write 将覆盖 lr 然后指向 add sp, #64,所以你的 bx lr只会导致最后两条指令的无限循环。

如果您像这样修改代码,它应该可以工作:

__printTest:
push {lr}
sub sp, #64 /* yes, I know this is too much */
....
bl _write
add sp, #64
pop {pc}

正如另一个答案中所述,您还应该使用 strb 而不是 str 来存储字节。

关于linux - ARM 汇编函数有问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10215307/

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