流程控制语句反汇编(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.三元运算符 ...
随机推荐
- 卸载重装ngin的问题解决方案
1,卸载nginx不保留配置文件 $ sudo apt-get --purge remove nginx 2,卸载自动安装且不再需要的依赖包 $ sudo apt-get autoremove 3,卸 ...
- R 读取回归模型的信息
参考博客: http://blog.sina.com.cn/s/blog_8f5b2a2e0101fmiq.html https://blog.csdn.net/huangyouyu523/artic ...
- 002、创建第一个Java程序HelloWord
代码如下: package TIANPAN; public class TestDemo { public static void main(String args[]) { System.out.p ...
- eshop6-nginx
1. Nginx 是什么? Nginx 是一款轻量级Web服务器,也是一款反向代理服务器 2. Nginx 能干什么 可以直接支持Rails 和PHP 程序 可以作为HTTP反向代理 作为负载均衡服务 ...
- python反序列化漏洞
原理在网页源码中如果出现将用户输入数据进行反序列化当成参数输出时,出现漏洞,可造成任意命令执行例如网页源码try: become = self.get_argument('become') ...
- 解决使用xampp无法通过ip访问的问题
本地能通过127.0.0.1或者localhost访问,无法通过外网地址访问: win解决防火墙问题: 1.进入控制面板 -> 系统和安全 -> 2.window防火墙 - 允许其他程序通 ...
- 获取选中行中的数据提取并且保存到txt
function getchcount(query: TADOQuery): Integer;var i:integer;begin i:=0; with Query do begin Query.F ...
- S7-300数据处理基本知识(结尾以MW8+1 ADD指令实训仿真,并用状态表监控及刷写变量)
数据处理基本知识汇总 STEP7 的数据类型包括什么? 基本数据类型 复杂数据类型 用于FB(功能块)的输入,输出参数类型 用于FC(功能)的输入,输出参数类型 基本数据类型是什么? 先列举12种数据 ...
- UVA - 1626 Brackets sequence (区间dp)
题意:给定一个串,可能空串,或由'[',']','(',')'组成.问使其平衡所需添加最少的字符数,并打印平衡后的串. 分析:dp[i][j]表示区间(i,j)最少需添加的字符数. 1.递推. #in ...
- POJ 1256:Anagram
Anagram Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18393 Accepted: 7484 Description ...