// 流程控制语句反汇编
//Author:乾卦 Date:2014-5-8 #include<stdio.h>
int main()
{
int a=,b=;
if(a>b)
{
a=b;
}
a=;
b=; return ;
}
//if语句的反汇编
#include<stdio.h>
int main()
{
000000013F711010 push rdi
000000013F711012 sub rsp,10h
000000013F711016 mov rdi,rsp
000000013F711019 mov ecx,
000000013F71101E mov eax,0CCCCCCCCh
000000013F711023 rep stos dword ptr [rdi]
int a=,b=;
000000013F711025 mov dword ptr [rsp],
000000013F71102C mov dword ptr [b],0Ah
if(a>b)
000000013F711034 mov eax,dword ptr [b]
000000013F711038 cmp dword ptr [rsp],eax
//如果a<=b 则跳过语句块
000000013F71103B jle main+34h (013F711044h)
{
a=b;
000000013F71103D mov eax,dword ptr [b]
000000013F711041 mov dword ptr [rsp],eax
}
a=;
000000013F711044 mov dword ptr [rsp],
b=;
000000013F71104B mov dword ptr [b],0Bh return ;
000000013F711053 xor eax,eax
}
000000013F711055 add rsp,10h
000000013F711059 pop rdi
000000013F71105A ret

if规定是满足条件则执行if语句块。
汇编与其相反,是满足条件则跳转,绕过某些代码块,这一点要注意。

if-else

// 流程控制语句反汇编
//Author:乾卦 Date:2014-5-8
#include<stdio.h>
int main()
{
int a=,b=;
if(a>b)
{
a=b;
}
else
{
b=a;
}
a=;
b=; return ;
} //if-else语句的反汇编 #include<stdio.h>
int main()
{
000000013FF31010 push rdi
000000013FF31012 sub rsp,10h
000000013FF31016 mov rdi,rsp
000000013FF31019 mov ecx,
000000013FF3101E mov eax,0CCCCCCCCh
000000013FF31023 rep stos dword ptr [rdi]
int a=,b=;
000000013FF31025 mov dword ptr [rsp],
000000013FF3102C mov dword ptr [b],0Ah
if(a>b)
000000013FF31034 mov eax,dword ptr [b]
000000013FF31038 cmp dword ptr [rsp],eax
//这是执行else的跳转语句 也是else的执行条件
000000013FF3103B jle main+36h (013FF31046h)
{
a=b;
000000013FF3103D mov eax,dword ptr [b]
000000013FF31041 mov dword ptr [rsp],eax
}
else //这是执行完if语句块跳转到else后的跳转
000000013FF31044 jmp main+3Dh (013FF3104Dh)
{
b=a;
000000013FF31046 mov eax,dword ptr [rsp]
000000013FF31049 mov dword ptr [b],eax
}
a=;
000000013FF3104D mov dword ptr [rsp],
b=;
000000013FF31054 mov dword ptr [b],0Bh return ;
000000013FF3105C xor eax,eax
}
000000013FF3105E add rsp,10h
000000013FF31062 pop rdi
000000013FF31063 ret

if的反汇编仍然没变,但是else有个jmp。

if-else语句的逻辑:if成功,else就不执行。

汇编的逻辑:if失败,跳转到else。否则执行if语句块,在else之前跳到if-else语句末尾。

两者有且只有一个执行。下面来自:《c++反汇编与逆向分析技术揭秘》作者: 钱松林

if-else if-else:

// 流程控制语句反汇编
//Author:乾卦 Date:2014-5-8 #include<stdio.h>
int main()
{
int a=,b=;
if(a>b)
{
a=b;
}
else if(a==)
{
b=a;
}
else if(b<)
{
b=;
}
else
{
a=a+b;
}
a=;
b=; return ;
}
//if-else if-else
#include<stdio.h>
int main()
{
000000013FAD31E0 push rdi
000000013FAD31E2 sub rsp,10h
000000013FAD31E6 mov rdi,rsp
000000013FAD31E9 mov ecx,
000000013FAD31EE mov eax,0CCCCCCCCh
000000013FAD31F3 rep stos dword ptr [rdi]
int a=,b=;
000000013FAD31F5 mov dword ptr [rsp],
000000013FAD31FC mov dword ptr [b],0Ah
if(a>b)
000000013FAD3204 mov eax,dword ptr [b]
000000013FAD3208 cmp dword ptr [rsp],eax
//跳到下一个判断语句
000000013FAD320B jle main+36h (013FAD3216h)
{
a=b;
000000013FAD320D mov eax,dword ptr [b]
000000013FAD3211 mov dword ptr [rsp],eax
000000013FAD3214 jmp main+64h (013FAD3244h)
}
else if(a==)
000000013FAD3216 cmp dword ptr [rsp],
000000013FAD321A jne main+45h (013FAD3225h)
{
b=a;
000000013FAD321C mov eax,dword ptr [rsp]
000000013FAD321F mov dword ptr [b],eax
000000013FAD3223 jmp main+64h (013FAD3244h)
}
else if(b<)
000000013FAD3225 cmp dword ptr [b],
000000013FAD322A jge main+56h (013FAD3236h)
{
b=;
000000013FAD322C mov dword ptr [b],1Eh
}
else
000000013FAD3234 jmp main+64h (013FAD3244h)
{
a=a+b;
000000013FAD3236 mov eax,dword ptr [b]
000000013FAD323A mov ecx,dword ptr [rsp]
000000013FAD323D add ecx,eax
000000013FAD323F mov eax,ecx
000000013FAD3241 mov dword ptr [rsp],eax
}
a=;
000000013FAD3244 mov dword ptr [rsp],
b=;
000000013FAD324B mov dword ptr [b],0Bh return ;
000000013FAD3253 xor eax,eax
}
000000013FAD3255 add rsp,10h
000000013FAD3259 pop rdi
000000013FAD325A ret

注:红色是一种跳,蓝色是一种跳。

if与else if都是若条件不满足则跳到下一个判断。最后一个else if则是跳到else语句块。else跟以前一样。

流程控制语句反汇编(1)(Debug版)的更多相关文章

  1. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  2. 在Web应用中接入微信支付的流程之极简清晰版 (转)

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  3. 第一章 python介绍、变量、数据类型、流程控制语句等

    一.python介绍 1.python的诞生 python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年发明,第一个公开发行版发行于1991年. ...

  4. 零基础学Python--------第3章 流程控制语句

    第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...

  5. Perl流程控制语句

    布尔值判断 如果是数字,0表示假,其它所有数字都是真. 如果是字符串,空字符串('')为假,其它所有字符串为真(有例外,见下一条). 如果是字符串'0',perl是当作数值0来处理的,所以这是唯一的非 ...

  6. 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句

    salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...

  7. [dart学习]第六篇:流程控制语句

    经过前面的基础知识了解学习,我们今天可以进入语句模块啦. dart主要有以下流程控制语句: if-else for循环 while和do-while循环 break和continue switch-c ...

  8. 一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数

    作者 | Jeskson 来源 | 达达前端小酒馆 1 JavaScript有多重要啊,才能让我说说一下,其中的语法,操作符,数据类型,内置功能等. 语法: 在JavaScript中的变量,函数名和操 ...

  9. 『无为则无心』Python基础 — 13、Python流程控制语句(条件语句)

    目录 1.流程控制基本概念 2.选择结构(条件语句) (1)条件语句概念 (2)if语句语法 (3)if...else...语句 (4)多重判断 (5)if语句嵌套 3.应用:猜拳游戏 4.三元运算符 ...

随机推荐

  1. Git内部原理探索

    目录 前言 Git分区 .git版本库里的文件/目录是干什么的 Git是如何存储文件信息的 当我们执行git add.git commit时,Git背后做了什么 Git分支的本质是什么 HEAD引用 ...

  2. 014.Oracle数据库,取本周第一天(星期一), 取本周最后一天(星期天)

    /*取本周第一天(星期一),取本周最后一天(星期天)*/ SELECT trunc( SYSDATE, AS 星期一 , trunc( SYSDATE, AS 星期天 FROM dual; 效果如下: ...

  3. pyhton输出表格数据出现省略号?(教你很快解决)

    //2019.07.18 pandas是python提供的非常好用的数据分析模块,但是在使用pandas进行数据分析时,有时候需要查看打印的结果,当dataframe行数或者列数比较多的时候,打印结果 ...

  4. 吴裕雄--天生自然java开发常用类库学习笔记:LinkedList类

    import java.util.LinkedList ; public class LinkedListDemo01{ public static void main(String args[]){ ...

  5. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-fast-forward

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  6. 前端 移动端H5页面 DEBUG

    下载网址:https://github.com/Tencent/vConsole 把这个JS复制到项目里面 然后引入到HTML中 然后在JS上面实例化一下即可 页面就会有一个绿色的,然后点击一下就可以 ...

  7. 08 SSM整合案例(企业权限管理系统):09.用户和角色操作

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户和角色操作 10.权限关联 11.AOP日志 09.用户和角色操作 1. 用 ...

  8. created a ThreadLocal with key of type [oracle.jdbc.driver.AutoKeyInfo$1]

    环境: spring4.3, mybatis3.5.2, ojdbc8_8c(oracle 18c jdbc) 调试状态下退出时,提示: 严重 [main] org.apache.catalina.l ...

  9. node核心 http模块

    node作为服务器更多的是web服务器 1.http模块 首先:http是一个协议.里面有通信机制,状态码一大堆乱七八糟的东西.自己写猴年马月都写不出来,这个对象帮我们集成.直接用 服务器对象: ht ...

  10. WEB前段(HTML+JS),后端(MYSQL+PHP)开发基础

    一.HTML HTML:超文本标记语言,可以加载JS/CSS/图片/链接等非文字的内容 一切的网页开发技术都需要建立在HTML的基础之上 HTML的结构和语法 HTML元素 注释:  <!-- ...