我有一个ARM汇编代码,atm只是从字符串变量打印出“Hello World”:
.global _start
_start:
mov r0, #40
mov r1, #25
bl func1
mov r7, #1
swi 0
func1:
push {lr}
add r2,r0,r1
mov r0,r2
bl func2
pop {pc}
func2:
mov r7, #4
mov r0, #1
mov r2, #12
ldr r1, =string
swi 0
bx lr
.data
string:
.ascii "Hello World\n"
现在,我想通过将其写入堆栈然后将write()系统调用结果的内存地址交给堆栈来打印func1(result = 65)中发生的添加结果。 我已经尝试使用
将func2开头的结果推送到堆栈上push {r0}
然后以某种方式加载r1中的地址(通过访问堆栈指针和偏移量4来存储要为write()系统调用打印的参数),如果Im正确则应该存储该值:
ldr r1, [sp, #4]
但这似乎不起作用,我只会在我尝试的所有内容中出现分段错误。
任何人都可以帮助我如何获取结果堆栈上的地址内存,然后继续使用write()系统调用打印它?如果它将结果打印为字母而不是数字(因为它可能会将其解释为ASCII值),我可以使用它,它只是我理解如何获取堆栈上的值的地址并打印它。 很多:)