if语句分析

1.if语句的反汇编判断
if语句反汇编后的标志:
    执行各类影响标志位的指令        
    jxx xxxx
如果遇到上面的指令,则很可能是if语句;
 
例如:
    1、案例一                                
    mov         eax,dword ptr [ebp+8]                    分析:cmp指令 影响标志位            
    cmp         eax,dword ptr [ebp+0Ch]                    jle :小于或者等于就跳转到00401059            
    jle         00401059                                
                                    
    2、案例二                                
    mov         eax,dword ptr [ebp+8]                    分析:cmp指令 影响标志位            
    cmp         eax,dword ptr [ebp+0Ch]                    jl  :小于则跳转            
    jl          00401059                                
                                    
    3、案例三                                
    mov         eax,dword ptr [ebp+8]                    jge :大于或者等于则跳转            
    cmp         eax,dword ptr [ebp+0Ch]                                
    jge         00401059                                
                                    
    4、案例四                                
    mov         eax,dword ptr [ebp+8]                    jg :大于则跳转            
    cmp         eax,dword ptr [ebp+0Ch]                                
    jg          00401059    
 
函数反汇编分析实例:
 
2.if...else语句的反汇编判断
反汇编标志性语句:
IF_BEGIN:                                           
    先执行各类影响标志位的指令                                        
    jxx ELSE_BEGIN                                      
    ......                                        
IF_END:                                        
    jmp END                                        
    ELSE_BEGIN:                                      
    ......                                        
    ELSE_END:                                    
END:    
 
特点分析: 
    1、如果不跳转,那么会执行到jmp处,jmp直接跳转到END处                        
    2、如果跳转,则会直接跳过jmp END处的代码,直接执行后面的代码   
 
总结: 
    跳转执行一部分代码,不跳转执行另外一部分代码     
    第一个jxx跳转的地址前面有一个jmp ,可以判断是if...else...语句  
 
例如:
 
3.IF...ELSE IF...ELSE IF..多分支语句的反汇编判断               
    IF_BEGIN:                
        影响标志位的指令            
        jxx ELSE_IF_BEGIN            
        ......            
    IF_END:                
        jmp END            
    ELSE_IF_BEGIN:                
        影响标志位的指令            
        jxx ELSE_BEGIN            
        ......            
    ELSE_IF_END:                
        jmp END            
    ELSE_BEGIN:                
        ......            
                    
    ELSE_END:                
    END:                
        ......       
 
分析:                
    1、当每个条件跳转指令要跳转的地址前面都有jmp 指令                
    2、这些jmp指令跳转的地址都是一样的                
    3、如果某个分支没有条件判断,则为else部分
 
4.函数内部功能分析
函数反汇编代码:
        
 
1、分析参数    
a=[ebp+8],b=[ebp+10],c=[ebp+c];
 
2、分析局部变量    
x=0,y=1,z=2;   
 
3、分析全局变量  
没看到直接寻址所以没有全局变量;
    
4、功能分析  
if(a<=c){
}else if(c>=b){
} else if(a>b){
}else{} 
    
5、返回值分析 
返回x+1   
    
6、还原成C函数    
if(a<=c){
    x=y-1;
}else if(c>=b){
    x=z+1;
} else if(a>b){
    x=y+z;
}else{
    x=y+z-1;
}
return x+1;
 
 
 
 
posted @ 2019-09-20 11:08  L丶银甲闪闪  阅读(267)  评论(0编辑  收藏  举报