"Hello、World!"プログラムをARMアセンブリ言語で記述し、それをシェルコードに変換してメモリ領域で実行したいと考えています。インテルのアセンブリ言語では、シェルコードに変換するときに.textセクションのみが使用されているので、.dataセクションは取り除かれました。 (See here)Hello World with ARMアセンブリのデータセクションなし
私はARMアセンブリ言語で同じことをするのに苦労しています。
ARMアセンブリのHello World
.global _start
.global mymessage
mymessage:
mov r7, #4
mov r0, #1
pop {r1}
mov r2, #12
swi 0
mov r7, #1
swi 0
_start:
bl mymessage
.ascii "Hello, World"
.dataセクションを省略するしかし、これは動作しませんARMアセンブリのHello Worldを修正
.global _start
_start:
mov r7, #4
mov r0, #1
ldr r1,=string
mov r2, #12
swi 0
mov r7, #1
swi 0
.data
string:
.ascii "Hello, World"
:基礎は、以下のコードでありますこれは明らかに「違法命令」であるためです。何か案は?
をARMは、既にPC相対アドレッシングがあり、どのような場合には、 'bl'は、スタック上のリターンアドレスをプッシュしていません。 – Jester
'bl'は同等ですが、ARMは戻りアドレスをスタックに入れません。しかし、ARMにはPCの相対アドレスがあるので、あなたは全くのトリックを必要としません。 – Jester
ああ、ありがとう! – Marvin