06 if, while
一. if语句的还原
1. if
1.1 debug版if的还原:以条件跳为上界,跳转到的地址为下界,做还原工作。
1.2 release版类似:
2. if else的还原
2.1 debug版:以条件跳为上界,跳转到的地址为中界,中界前有向下的跳转,说明不是循环,以此跳转到的地址为下界,做还原工作
2.2.1 vs2019的release版:cmovcc指令
2.2.2 vc6的release版:
公共代码外提:还原时把公共代码补回去
3. if elseif elseif else
vc6的release:许多jmp共一个下界
有些组共一个下界,有些组共另一个下界:地址低的下界还原回去
二. 循环语句的还原
1. do:只有一个向上的跳,按条件正向还原,和CPU的流水线方向一致,还原成小于等于:
2. while:识别循环条件和循环体:条件跳调到结束,结束前存在无条件上跳,跳到条件部分
3. for:明显的结构
4. break跳到循环外,continue可被优化为if