Assembly ARM 32位STR指令
我在ARM编程方面没有太多经验,我正在尝试启动以下程序: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}
_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”