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;
 
 
 
 

if语句分析的更多相关文章

  1. tsql语句分析工具 转

    一款好用且免费的语句分析工具 在调优过程中的查询语句优化阶段,分析语句的执行计划是必经之路,一款好的执行计划分析工具确实可以帮助我们事半功倍 一款名为“Plan Explorer“,自己用的挺爽,不私 ...

  2. sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取

    原文:sqlserver 抓取所有执行语句 SQL语句分析 死锁 抓取 在多人开发中最头疼的是人少事多没有时间进行codereview,本来功能都没时间写,哪有时间来开会细细来分析代码.软件能跑就行, ...

  3. MongoDB分析工具之一:explain()语句分析工具

    explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mongo ...

  4. Lucene中Analyzer语句分析

    Lucene中Analyzer语句分析,利用lucene中自带的词法分析工具Analyzer,进行对句子的分析. 源代码如下: package com.test; import java.io.IOE ...

  5. 一款好用且免费的语句分析工具Plan Explorer

    在调优过程中的查询语句优化阶段,分析语句的执行计划是必经之路,一款好的执行计划分析工具确实可以帮助我们事半功倍 小贴士:Plan Explorer是将Plan Explorer 专业版与免费版整合在一 ...

  6. mysql语句分析

    explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1,id   select识别符.这是select的查询序列号.2,select_type 可以为一下任何一种类型simple ...

  7. SQL删除重复行和查询所有大于某成绩的语句分析

    有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHER ...

  8. python通过一个语句分析几个常用函数和概念

    前言 过年也没完全闲着,每天用一点点时间学点东西,本文为大家介绍几个python操作的细节,包含all.any.for in等操作,以及介绍我解决问题的思路. 一.开篇 先从我看到的一个简单的语句开始 ...

  9. MySQL SQL语句分析查询优化

    如何获取有性能问题的SQL 1.通过用户反馈获取存在性能问题的SQL 2.通过慢查询日志获取性能问题的SQL 3.实时获取存在性能问题的SQL 使用慢查询日志获取有性能问题的SQL 首先介绍下慢查询相 ...

  10. MySQL 语句分析

    公司使用的数据库是 MySQL 数据库,我对于 MySQL 的了解仅仅是上学的时候学过PHP略微了解. 我认为,作为一个后端程序员,除了在意功能能不能实现之外, 在实现功能之后,还要去想有没有更好的办 ...

随机推荐

  1. 骨牌摆放方案数n*m(状压DP)

    题意:https://www.nitacm.com/problem_show.php?pid=1378 如题. 思路: 从第一行for到最后一行,枚举每一行的所有状态,进行转移,注意答案是dp[最后一 ...

  2. python私有化xx、_xx、__xx、__xx__、xx_的区别

    xx:共有变量. _xx:私有化的属性或方法,from xxx import * 时无法导入,子类的对象和子类可以访问. __xx:避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到 ...

  3. Elastic Search中mapping的问题

    Mapping在ES中是非常重要的一个概念.决定了一个index中的field使用什么数据格式存储,使用什么分词器解析,是否有子字段,是否需要copy to其他字段等.Mapping决定了index中 ...

  4. 使用python的ctypes库实现内存的动态申请和释放

    1.申请前内存占用情况 2.申请内存 from ctypes import * import time #在这里申请1G的内存,单位k mem = create_string_buffer(1024* ...

  5. 超链接hover切换效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta na ...

  6. JS基础_属性名和属性值

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 如何使用Jedis操作redis

    public class JredisTest { private static Jedis jedis = new Jedis("localhost", 6379); publi ...

  8. 鼠标右键点击弹出菜单(jQuery)

    禁用浏览器默认事件,此处是兼容写法 $(document).contextmenu(function (e) { var event = e || window.event; if (event.pr ...

  9. 微信小程序常用事件

    bind bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡. bindtap  跳转页面 bindchange  .value 改变时触发 change 事件 bi ...

  10. Odoo的 base 模型

    Odoo 内核中有一个base插件模块.它提供了 Odoo 应用所需的基本功能.然后有一组内置插件模块来提供标准产品中的官方应用和功能.base模块中包含两类模型: 信息仓库(Information ...