ARM程序集:写入堆栈的编号

时间:2017-05-12 11:03:32

标签: assembly arm

我有一个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值),我可以使用它,它只是我理解如何获取堆栈上的值的地址并打印它。 很多:)

0 个答案:

没有答案