if语句的反汇编判断

  if语句的反汇编判断基本是围绕JCC指令的,如果想要有深刻的理解,可以自行练习JCC指令

  执行各类影响标志位的指令
  jxx xxxx
  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

  仅列举少许,有兴趣可以尝试全部的JCC指令,以便加深理解

案例分析

  在分析if语句时,我们得先有一个整体概念,即在函数调用前,先分析大段,如下:

  函数调用处代码:

  push 5          分析:
  push 4          两个参数
  call 0040100f
  add esp,8

  分析第一个实例:

    push        ebp
mov ebp,esp
sub esp,40h
push ebx
push esi
push edi
lea edi,[ebp-40h]
0040103C mov ecx,10h
mov eax,0CCCCCCCCh
rep stos dword ptr [edi]
mov eax,dword ptr [ebp+]
0040104B cmp eax,dword ptr [ebp+0Ch]
0040104E jle
mov ecx,dword ptr [ebp+]
mov dword ptr [004225c4],ecx
pop edi
0040105A pop esi
0040105B pop ebx
0040105C mov esp,ebp
0040105E pop ebp
0040105F ret

  我在Excel中将其用颜色标注,上下两段颜色一样的,我们可以不用看,之前有过探究,开辟堆栈所进行的一系列操作,实际功能块就是中间紫色那块

        

  我们的分析过程可大致分为下面五个步骤:

  函数内部功能分析:

  1、分析参数:
  [ebp+8] : X [ebp+0Ch] :Y

  2、分析局部变量
  无

  3、分析全局变量
  mov dword ptr 004225c4,ecx

  4、功能分析
  mov eax,dword ptr [ebp+8]
  cmp eax,dword ptr [ebp+0Ch]

  将参数X存到到EAX中,然后比较EAX,与参数Y的大小
  如果X<=Y 那么跳转到00401059的位置

  否则,将X的值存储到全局变量中

  5、返回值分析
  无

  分析第二个实例:

  调用处代码:

  push 5
  push 4
  call 0040100f
  add esp,8

  函数内部:

    push        ebp
mov ebp,esp
sub esp,44h
push ebx
push esi
push edi
lea edi,[ebp-44h]
0040103C mov ecx,11h
mov eax,0CCCCCCCCh
rep stos dword ptr [edi]
mov eax,[004225c4]
0040104D mov dword ptr [ebp-],eax
mov ecx,dword ptr [ebp+]
cmp ecx,dword ptr [ebp+0Ch]
jg
mov edx,dword ptr [ebp+0Ch]
0040105B add edx,dword ptr [ebp-]
0040105E mov dword ptr [004225c4],edx
pop edi
pop esi
pop ebx
mov esp,ebp
pop ebp
0040106A ret

  我还是在Excel中标注一下颜色:

        

  函数内部功能分析:

  1、分析参数:
  Y: ebp+8     Z: ebp+c

  2、分析局部变量
  A:ebp-4

  3、分析全局变量
  Global:dword ptr [004225c4],edx

  4、功能分析

  a、00401048 mov eax,[004225c4]
  0040104D mov dword ptr [ebp-4],eax
  A = Global

  b、00401050 mov ecx,dword ptr [ebp+8]
  00401053 cmp ecx,dword ptr [ebp+0Ch]
  参数Y与Z比较大小

  c、00401056 jg 00401064
  如果Y比Z大,则跳转至0x00401064,否则程序走下一步

  d、00401058 mov edx,dword ptr [ebp+0Ch]
  0040105B add edx,dword ptr [ebp-4]
  0040105E mov dword ptr [004225c4],edx
  到这一步,说明Y小于等于Z,将Z与A相加,并把相加的值赋给Global

  5、返回值分析
  无
  6、还原成C函数

 int Global;
void function(int Z, int Y)
{
int A = Global;
if (Y <= Z)
{
Global = A + Z;
}
}

IF...ELSE...语句的反汇编判断:

  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...语句

第一个案例分析

 004010B0   push        ebp
004010B1 mov ebp,esp
004010B3 sub esp,44h
004010B6 push ebx
004010B7 push esi
004010B8 push edi
004010B9 lea edi,[ebp-44h]
004010BC mov ecx,11h
004010C1 mov eax,0CCCCCCCCh
004010C6 rep stos dword ptr [edi]
004010C8 mov eax,[004225c4]
004010CD mov dword ptr [ebp-],eax
004010D0 mov ecx,dword ptr [ebp+]
004010D3 cmp ecx,dword ptr [ebp+0Ch]
004010D6 jle 004010e6
004010D8 mov edx,dword ptr [ebp+]
004010DB add edx,dword ptr [ebp-]
004010DE mov dword ptr [004225c4],edx
004010E4 jmp 004010f1
004010E6 mov eax,dword ptr [ebp+0Ch]
004010E9 add eax,dword ptr [ebp-]
004010EC mov [004225c4],eax
004010F1 pop edi
004010F2 pop esi
004010F3 pop ebx
004010F4 mov esp,ebp
004010F6 pop ebp
004010F7 ret

        

  函数内部功能分析:

  1、分析参数:
  [ebp+8] : X [ebp+0Ch] :Y

  2、分析局部变量
  [ebp-4] = eax = [004225c4]

  3、分析全局变量
  [004225c4] G

  4、功能分析

  a、004010C8 mov eax,[004225c4]
  004010CD mov dword ptr [ebp-4],eax
  Local = Global

  b、004010D0 mov ecx,dword ptr [ebp+8]
  004010D3 cmp ecx,dword ptr [ebp+0Ch]
  比较X与Y的大小

  c、如果Y<=X 那么执行
  004010E6 mov eax,dword ptr [ebp+0Ch] X
  004010E9 add eax,dword ptr [ebp-4] Local + X
  004010EC mov [004225c4],eax Global = Local + X

  d、如果Y>X 那么执行
  004010D8 mov edx,dword ptr [ebp+8] Y
  004010DB add edx,dword ptr [ebp-4] Local + Y
  004010DE mov dword ptr [004225c4],edx Global = Local + Y
  004010E4 jmp 004010f1

  5、返回值分析
  无

第二个案例分析

 004010B0   push        ebp
004010B1 mov ebp,esp
004010B3 sub esp,48h
004010B6 push ebx
004010B7 push esi
004010B8 push edi
004010B9 lea edi,[ebp-48h]
004010BC mov ecx,12h
004010C1 mov eax,0CCCCCCCCh
004010C6 rep stos dword ptr [edi]
004010C8 mov eax,[004225c4]
004010CD mov dword ptr [ebp-],eax
004010D0 mov dword ptr [ebp-],
004010D7 mov ecx,dword ptr [ebp+]
004010DA cmp ecx,dword ptr [ebp+0Ch]
004010DD jl 004010e8
004010DF mov edx,dword ptr [ebp-]
004010E2 add edx,
004010E5 mov dword ptr [ebp-],edx
004010E8 mov eax,dword ptr [ebp+]
004010EB cmp eax,dword ptr [ebp+0Ch]
004010EE jge 004010fb
004010F0 mov ecx,dword ptr [ebp-]
004010F3 mov dword ptr [004225c4],ecx
004010F9 jmp
004010FB mov edx,dword ptr [ebp-]
004010FE add edx,dword ptr [ebp-]
mov dword ptr [004225c4],edx
pop edi
pop esi
pop ebx
0040110A mov esp,ebp
0040110C pop ebp
0040110D ret

        

分析过程如下:

        

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

  1. 对于Oracle中分页排序查询语句执行效率的比较分析

    转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...

  2. 【java开发】分支语句、循环语句学习

    一.Java分支语句类型 if-else 语句 switch 关于if-esle语句可以拆分为三种 if语句 if(条件){语句块;} if-else语句if(条件语句){语句块;} if-else ...

  3. 前端笔记知识点整合之JavaScript(三)关于条件判断语句、循环语句那点事

      一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力 ...

  4. 前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事

    一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力语法 ...

  5. 【DB2】SQL0501N FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开。 SQLSTATE=24501

    在DB2中建立存储过程时使用了隐式游标,在调用的时候报错如下: SQL0501N  FETCH 语句或 CLOSE 语句中指定的游标尚未打开,或者游标标量函数引用中的游标变量尚未打开.  SQLSTA ...

  6. 为什么说在使用多条件判断时switch case语句比if语句效率高?

    在学习JavaScript中的if控制语句和switch控制语句的时候,提到了使用多条件判断时switch case语句比if语句效率高,但是身为小白的我并没有在代码中看出有什么不同.去度娘找了半个小 ...

  7. continue语句在for语句和while语句中的区别

    while语句的形式: while( expression ) statement for语句的形式: for( expression1; expression2;expression3 )   // ...

  8. javascript语句——条件语句、循环语句和跳转语句

    × 目录 [1]条件语句 [2]循环语句 [3]跳转语句 前面的话 默认情况下,javascript解释器依照语句的编写顺序依次执行.而javascript中的很多语句可以改变语句的默认执行顺序.本文 ...

  9. javascript语句——表达式语句、块语句、空语句和声明语句

    × 目录 [1]表达式 [2]块语句 [3]空语句[4]声明 前面的话 如果表达式在javascript中是短语,那么语句(statement)就是javascript整句或命令.表达式计算出一个值, ...

  10. PHP include语句和require语句

    <?php /* PHP include语句和require语句 include和require 语句是相同的 除了错误处理方面: *require 会生成致命错误,并停止脚本 *include ...

随机推荐

  1. HTML识别后台传输或者js变量中字符串里的 '\n' 并成功换行显示

    HTML识别 string 里的 '\n' 并成功换行显示 设置标签的的css属性 white-space: pre-line; <div style='white-space: pre-lin ...

  2. HashMap数据结构与实现原理解析(干货)

    HashMap 数据结构解析: HashMap内部使用hash表(本质是一个数组见图一) HashMap使用hash算法计算得到存放的索引位置,以此来加快查询速度,(比ArrayList还要快) 同样 ...

  3. 关于vue-detools chorme创建安装完成,但是控制台不显示问题

    搜了一下发现挺多人遇到这个问题的,绝大多数的回答都是在main.js中添加下面代码 Vue.config.devtools = true; 但是发现并不行. 后来看到有人说刷新然后在按F12就好了,居 ...

  4. PHP学习—了解篇2

    使用PHP 表单 表单处理: PHP超全局变量:$_GET 和 $ _POST 用于处理表单数据(form-data) < form > 表单标签 ​ action属性:规定表单数据提交U ...

  5. 解决adb网络连接中出现的“由于目标计算机积极拒绝,无法连接”错误

    在调试一块全志A83T安卓工控板(已root),启动后,安卓系统正常,设置好以太网 的静态IP地址:192.168.1.181,并接好网线,同时开发电脑WIN7系统IP地址 也是129.168.1.x ...

  6. PyCharm如何导入python项目,并配置虚拟环境

    Pycharm导入python项目 进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹: 打开了python项目后,需要配置该项目对应的python才可以正常运行: 配 ...

  7. centos7.6使用openssl生成CA签署的证书个人实验笔记

    准备:客户端centos6.10  服务端Centos7.6 实验:客户端生成证书请求,服务端颁发证书,最后吊销其中一个证书 1.先在服务端上的/etc/pki/CA/目录生成rsa的私钥: 2.在服 ...

  8. 201871010116-祁英红《面向对象程序设计(java)》第七周学习总结

    项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...

  9. Linux下安装redis报错信息

    redis在Linux安装报错 标签: redislinuxcentos 2017-02-24 13:46 384人阅读 评论(0) 收藏 举报  分类: Linux安装工具(2)  版权声明:本文为 ...

  10. acWing 825. 排队购物

    题目描述苏西小朋友和她的妈妈正在超市里购物,看着收银处排着的长长的队伍,她就想如何能够提高整体的服务质量呢? 已知,现在有n个人正在排队等待结账,每个人结账所花的时间都可能是不同的,第 i 个人的结账 ...