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. ASP.NET Core中使用Dapper

    ⒈添加 NuGet 包 Install-Package Dapper ⒉封装数据库类型 using System; using System.Collections.Generic; using Sy ...

  2. [AHOI2017初中组]guide 题解

    题面 我们无论怎么走,都是要从此点沿最短路径走到终点,所以我们以n为原点跑两边dijkstra就可以了: 而抱怨数可以根据之前跑出来的东西新建一个图,然后跑最短路就好了: #include <b ...

  3. # MATLAB数据处理

    目录 MATLAB数据处理 数据归一化处理 冒号的作用(获取指定行列的数据) MATLAB数据处理 mean(A,(b)) %均值函数,b为设置对哪一维上的数据进行处理,默认为第一维(列),行为第二维 ...

  4. PHP以table形式导出数据表实现单元格内换行

    <br style='mso-data-placement:same-cell;'>

  5. Open API

    OAuth和SSO都可以做统一认证登录,但是OAuth的流程比SSO复杂.SSO只能做用户的认证登录,OAuth不仅能做用户的认证登录,开可以做open api开放更多的用户资源. Open API即 ...

  6. 12-Perl 时间日期

    1.Perl 时间日期本章节介绍 Perl 语言对时间日期的处理.Perl中处理时间的函数有如下几种: time() 函数:返回从1970年1月1日起累计的秒数 localtime() 函数:获取本地 ...

  7. 7-Perl 数组

    1.Perl 数组Perl 数组一个是存储标量值的列表变量,变量可以是不同类型.数组变量以 @ 开头.访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取,实例如下:#!/usr/bin/p ...

  8. vs 2017创建类时的默认模板修改

    思路:找到vs 2017安装目录---->找到模板文件---->修改 一般安装目录: C:\Program Files (x86)\Microsoft Visual Studio\2017 ...

  9. 阿里Java开发规约【摘录】

    1.命名规约 [强制]类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO等. 正例:MarcoPolo / User ...

  10. Go学习笔记【一、概述】

    工作需要,即将要把部分查询计算的逻辑翻译成Go语言,来提升查询效率 在此需要对Go语言进行学习,先把入门教程浏览了一遍,发现有些语法和C很类似,还有部分类似于Python,还没有深入学习,先开个坑,业 ...