【发布时间】:2017-10-11 16:27:37
【问题描述】:
我有一个 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"
但是,现在我想打印 func1 (result = 65) 中发生的加法结果,方法是将其写入堆栈,然后将 write() 系统调用交给堆栈上结果的内存地址。 我已经尝试将 func2 开头的结果推入堆栈
push {r0}
然后通过访问堆栈指针和偏移量 4 以某种方式加载 r1 中的地址(它存储要为 write() 系统调用打印的参数),如果我正确,则应该存储该值:
ldr r1, [sp, #4]
但这似乎不起作用,我这样尝试的所有东西都会出现分段错误。
谁能帮助我了解如何获取结果堆栈上的地址内存,然后使用 write() 系统调用继续打印它?如果它将结果打印为字母而不是数字(因为它可能会将其解释为 ASCII 值),我可以接受,这只是让我了解如何获取堆栈上值的地址并打印它。 非常感谢:)
【问题讨论】: