1

ROPについては、このペーパーを参照してください

AVR-8bitのガジェットカタログを作っているのですが、ちょっと疑問があります。次の例を使用して質問します。

v1=v1+v2 にするために; (v1 と v2 は変数です) 対応するアセンブリは次のとおりです。

ldi r17, #value
ldi  r18, #value
add r18,r17;

また

ldi r17, #value
mov r1, r17;
ldi  r18, #value
add r18,r1;

また

ldi r17, #value
ldi  r18, #value
mov r1, r18;
add r1,r17;

また

ldi r17, #value
mov r1, r17;
ldi r18, #value
mov r2, r18;
add r2,r1;

ガジェットは以下になりますか?

ldi r#, #value;
ldi r#, value;
add r#, r#;
ret

または単に以下と組み合わせてldi r#,r#; ret、 と組み合わせてmov?

add r#,r#;
ret
4

1 に答える 1

2

ldiは定数をロードしており、実行時に 2 つの定数を追加してもあまり意味がありません。そのため、ガジェットはadd; ret唯一のものとなり、他のガジェットを使用して 2 つのオペランドが適切なレジスタにあることを確認する必要があります。

ただし、定数をレジスタに追加するためのガジェットを用意することは理にかなっているかもしれません。

于 2013-10-28T20:32:23.597 に答える