Assembly ARM 32位STR指令

Assembly ARM 32位STR指令,assembly,arm,Assembly,Arm,我在ARM编程方面没有太多经验,我正在尝试启动以下程序: _start: STMFD SP!, {R11,LR} ADD R11, SP, #4 SUB SP, SP, #0x18 SUB R12, R11, #24 mov r5, #74 ;index for loop ldr r3, =data mov lr, r3 LDMIA LR!, {R0-R3}

我在ARM编程方面没有太多经验,我正在尝试启动以下程序:

_start:
        STMFD SP!, {R11,LR}
        ADD   R11, SP, #4
        SUB   SP, SP, #0x18
        SUB   R12, R11, #24
        mov r5, #74 ;index for loop
        ldr r3, =data
        mov lr, r3
        LDMIA LR!, {R0-R3}
        STMIA R12!, {R0-R3}

_loop:
        str r12,[lr],#4
        subs r5,r5,#1
        bne _loop
但我有一个SIGSEGV在这个指令之后:

str r12,[lr],#4
这是内存的转储:

(gdb) x/10x $r12
0xbeb6c944: 0x00000000  0x00000000  0x00000000  0x00000001
0xbeb6c954: 0xbeb6ca79  0x00000000  0xbeb6ca8b  0xbeb6caa3
0xbeb6c964: 0xbeb6cab6  0xbeb6cabd
我认为问题在于堆栈不可写,但为什么在这条指令STMIA R12!,{R0-R3}我没有任何问题吗

任何建议都将不胜感激

str r12,[lr],#4
将r12存储到
lr
中的地址中,并带有post索引(
lr+=4
)。方括号表示解引用/内存操作数,如x86语法中所示


由于您显示了
x/10x$r12的输出,我认为您混淆了哪个寄存器是数据,哪个寄存器是地址。

符号
data
有什么值?数据:.asciz”/system/bin/curl“http:.asciz”