流程控制语句反汇编(1)(Debug版)
// 流程控制语句反汇编
//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版)的更多相关文章
- 在Web应用中接入微信支付的流程之极简清晰版
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- 在Web应用中接入微信支付的流程之极简清晰版 (转)
在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...
- 第一章 python介绍、变量、数据类型、流程控制语句等
一.python介绍 1.python的诞生 python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年发明,第一个公开发行版发行于1991年. ...
- 零基础学Python--------第3章 流程控制语句
第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...
- Perl流程控制语句
布尔值判断 如果是数字,0表示假,其它所有数字都是真. 如果是字符串,空字符串('')为假,其它所有字符串为真(有例外,见下一条). 如果是字符串'0',perl是当作数值0来处理的,所以这是唯一的非 ...
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- [dart学习]第六篇:流程控制语句
经过前面的基础知识了解学习,我们今天可以进入语句模块啦. dart主要有以下流程控制语句: if-else for循环 while和do-while循环 break和continue switch-c ...
- 一篇文章带你了解JavaScript中的语法,数据类型,流程控制语句以及函数
作者 | Jeskson 来源 | 达达前端小酒馆 1 JavaScript有多重要啊,才能让我说说一下,其中的语法,操作符,数据类型,内置功能等. 语法: 在JavaScript中的变量,函数名和操 ...
- 『无为则无心』Python基础 — 13、Python流程控制语句(条件语句)
目录 1.流程控制基本概念 2.选择结构(条件语句) (1)条件语句概念 (2)if语句语法 (3)if...else...语句 (4)多重判断 (5)if语句嵌套 3.应用:猜拳游戏 4.三元运算符 ...
随机推荐
- CentOS下安装Orcale
以前没有安装过,最近安装了.感觉在Liunx安装真的超麻烦.这是技术文档,分享给大家. LINUX安装oracle数据库步骤: 1.安装依赖包 yum -y install gcc gcc-c ...
- java文件的上传
文件的上传和下载在web应用中是非常常用,也是非常有用的功能. 例如:发送电子邮件时可以同过上传附件发送文件,OA系统中可以通过上传文件来提交公文,社交网站通过上传图片来自定义头像等等. 例如:下 ...
- Selenium -- ActionChains().move_by_offset() 卡顿的解决方法
测试运行时间 运行时间 发现每次0.5秒,此时需要修改默认的时间 打开Python安装目录下的Lib\site-packages\selenium\webdriver\common\actions\p ...
- 程序员如何 10 分钟用 Python 画出蒙娜丽莎?
之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳.对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! 基本思路 ...
- javascript实现ul中列表项随机排列
方法1 <!DOCTYPE html><html lang="en"><head> <script type="text/jav ...
- spring boot引入外部jar包
两种方法: 一:使用project-properties-java build path-Libraries 此方法的问题时不能使用mav打包. 二:写到POM里 首先在新建libs文件夹(根目录或者 ...
- HttpServletRequest HttpServletResponse接口详解
HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求 ...
- ACM-Divide Tree
题目描述:Divide Tree As we all know that we can consider a tree as a graph. Now give you a tree with n ...
- junit基础学习之-引用spring容器的测试(7)
context 自动注入的文章链接:http://www.360doc.com/content/11/0815/09/2371584_140471325.shtml
- python 嵌套爬取网页信息
当需要的信息要经过两个链接才能打开的时候,就需要用到嵌套爬取. 比如要爬取起点中文网排行榜的小说简介,找到榜单网址:https://www.qidian.com/all?orderId=&st ...