请参阅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#; retmov的组合?
add r#,r#;
ret

最佳答案

ldi正在加载一个常量,在运行时添加两个常量没有多大意义。因此,您的gadget将仅是add; ret,您将希望通过使用其他gadget确保这两个操作数位于适当的寄存器中。
不过,有一个用于向寄存器中添加常量的小工具可能是有意义的。

关于c - AVR架构上ROP中的小工具,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19640887/

10-09 12:53