2016-08-14 8 views
-1

私がフォロープログラムを起動しようとしている、プログラミングARMでの多くの経験を持っていない:ARM 32ビットSTR命令

_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 

私はこの問題は、スタックが書き込み可能でないことに起因していると思いますが、なぜこのinstruでSTTIA R12 !, {R0-R3}私は問題ありませんか?

ご迷惑をおかけして申し訳ございません。

+0

シンボル 'データ 'にはどのような価値がありますか? – rjp

+0

データ:.asciz "/ system/bin/curl" http:.asciz "http://website/file.txt" – Livio

答えて

1

According to the ARM docs for str,str r12,[lr],#4は、lrのアドレスにr12を格納し、ポストインデックス(店舗後はlr+=4)を格納します。角括弧は、x86構文のような逆参照/メモリオペランドを示します。

x/10x $r12の出力が表示されているので、どのレジスタにデータが混在していて、どのアドレスにアドレスが混在していると思います。

関連する問題