请参阅this paper
我正在为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
最佳答案
ldi
正在加载一个常量,在运行时添加两个常量没有多大意义。因此,您的gadget将仅是add; ret
,您将希望通过使用其他gadget确保这两个操作数位于适当的寄存器中。
不过,有一个用于向寄存器中添加常量的小工具可能是有意义的。
关于c - AVR架构上ROP中的小工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19640887/