06 if, while

. if语句的还原

1. if

1.1 debugif的还原:以条件跳为上界,跳转到的地址为下界,做还原工作。

 

 

1.2 release版类似:

 

 

2. if else的还原

2.1 debug版:以条件跳为上界,跳转到的地址为中界,中界前有向下的跳转,说明不是循环,以此跳转到的地址为下界,做还原工作

 

 

2.2.1 vs2019release版:cmovcc指令

 

 

2.2.2 vc6release版:

 

 

 

 

 

公共代码外提:还原时把公共代码补回去

 

 

 

 

 

3. if elseif elseif else

vc6release:许多jmp共一个下界

 

 

有些组共一个下界,有些组共另一个下界:地址低的下界还原回去

 

 

 

. 循环语句的还原

1. do:只有一个向上的跳,按条件正向还原,和CPU的流水线方向一致,还原成小于等于:

 

 

2. while:识别循环条件和循环体:条件跳调到结束,结束前存在无条件上跳,跳到条件部分

 

 

3. for:明显的结构

 

 

 

 

 

 

4. break跳到循环外,continue可被优化为if

 

posted @ 2020-12-07 14:59  八转达人  阅读(130)  评论(0编辑  收藏  举报