流程控制语句反汇编(1)(Debug版)
// 流程控制语句反汇编 //Author:乾卦 Date:2014-5-8 #include<stdio.h> int main() {int a=1,b=10;if(a>b){a=b;}a=2;b=11;return 0; } //if语句的反汇编 #include<stdio.h> int main() { 000000013F711010 push rdi 000000013F711012 sub rsp,10h 000000013F711016 mov rdi,rsp 000000013F711019 mov ecx,4 000000013F71101E mov eax,0CCCCCCCCh 000000013F711023 rep stos dword ptr [rdi] int a=1,b=10; 000000013F711025 mov dword ptr [rsp],1 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=2; 000000013F711044 mov dword ptr [rsp],2 b=11; 000000013F71104B mov dword ptr [b],0Bh return 0; 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=1,b=10;if(a>b){a=b;}else{b=a;}a=2;b=11;return 0; }//if-else语句的反汇编 #include<stdio.h> int main() { 000000013FF31010 push rdi 000000013FF31012 sub rsp,10h 000000013FF31016 mov rdi,rsp 000000013FF31019 mov ecx,4 000000013FF3101E mov eax,0CCCCCCCCh 000000013FF31023 rep stos dword ptr [rdi] int a=1,b=10; 000000013FF31025 mov dword ptr [rsp],1 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=2; 000000013FF3104D mov dword ptr [rsp],2 b=11; 000000013FF31054 mov dword ptr [b],0Bh return 0; 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=1,b=10;if(a>b){a=b;}else if(a==3){b=a;}else if(b<2){b=30;}else{a=a+b;}a=2;b=11;return 0; } //if-else if-else #include<stdio.h> int main() { 000000013FAD31E0 push rdi 000000013FAD31E2 sub rsp,10h 000000013FAD31E6 mov rdi,rsp 000000013FAD31E9 mov ecx,4 000000013FAD31EE mov eax,0CCCCCCCCh 000000013FAD31F3 rep stos dword ptr [rdi] int a=1,b=10; 000000013FAD31F5 mov dword ptr [rsp],1 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==3) 000000013FAD3216 cmp dword ptr [rsp],3 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<2) 000000013FAD3225 cmp dword ptr [b],2 000000013FAD322A jge main+56h (013FAD3236h) {b=30; 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=2; 000000013FAD3244 mov dword ptr [rsp],2 b=11; 000000013FAD324B mov dword ptr [b],0Bh return 0; 000000013FAD3253 xor eax,eax } 000000013FAD3255 add rsp,10h 000000013FAD3259 pop rdi 000000013FAD325A ret
注:红色是一种跳,蓝色是一种跳。
if与else if都是若条件不满足则跳到下一个判断。最后一个else if则是跳到else语句块。else跟以前一样。
转载于:https://www.cnblogs.com/qiangua/p/3717691.html
流程控制语句反汇编(1)(Debug版)相关推荐
- python基础第三章选择结构答案-零基础学Python--------第3章 流程控制语句
第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...
- C语言编程的Debug版和Release版
C语言编程的Debug版和Release版 简单的来说:Debug版是调试版,可以调试,让程序员用的.Release版是发行版,是用户用的,不能调试. 专业解释 Debug版: Debug 是&quo ...
- JS基础02之流程控制语句
if-else-if多分支语句 练习案例1 说明:输入学生的成绩并根据成绩给出相应的等级, 等级评定标准: 成绩在90–100(包含)之间,显示 A,成绩在80–90(包含)之间, 显示 B,成绩在7 ...
- 零基础学Python--------第3章 流程控制语句
第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结构.选择结构和循环结构 ...
- java第一周_从计算机基础到流程控制语句(if_else)
一.计算机基础 裸机 没有安装任何软件的计算机(无操作系统.无应用软件) 计算机的应用 1.科学计算 科学计算也称数值计算.计算机最开始是为解决科学研究和工程设计中遇到的大量数学问题的数值计算而研制的 ...
- 【Python自动化测试8】流程控制语句讲解
文章目录 一.前言 二.流程控制语句 2.1 if else流程控制语句的作用 2.2 if else条件语句讲解 2.2.1 简单的if语句 2.2.2 if / else语句 2.2.3 if / ...
- Go语言基础语法-流程控制语句
前言 程序是由语句构成,而流程控制语句 是用来控制程序中每条语句执行顺序的语句.可以通过控制语句实现更丰富的逻辑以及更强大的功能.几乎所有编程语言都有流程控制语句,功能也都基本相似. 其流程控制方式有 ...
- 第3章 流程控制语句
第3章 流程控制语句 第3章 流程控制语句 3.1程序的结构 计算机在解决某个具体问题时,主要有3种情况,分别是顺序执行所有的语句.选择执行部分语句和循环执行部分语句.程序设计中的3种基本结构为顺序结 ...
- debug版函数初始化入口 0xcc
在VC++编写的程序编程成Debug版,反汇编代码,函数入口处经常看到如下一段代码: 00EA14E0 55 push ebp 00EA14E1 8B ...
- 【Sql Server】Database-sql语言的流程控制语句
流程控制语句 If else语句 If (表.列) {语句|语句块begin,,,end} Else {语句|语句块begin,,,end } If else 语句嵌套 If Begin If ...
最新文章
- mysql为int类型的字段php取出来之后为何变为string类型?
- 路过的朋友们,最后一天投票,感谢
- dcn和dcnv2 torch
- Writing a Tile Engine in JavaFX
- anacoda里面安装包显示失败_CAD卸载不干净?安装老是失败?送你官方卸载工具...
- java script的图片隐藏,java和javascript中过滤掉img形式的字符串不显示图片的方法...
- LeetCode 1940. 排序数组之间的最长公共子序列(二分查找)
- Redis 数据结构的实现
- php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
- 小程序做一个能够左右滑动切换的多tab页面
- threejs 模型隐藏后不显示_教师资格证面试报名后显示“待审核”?不做这一步报名白费!...
- 问题TypeError: __init__() takes 1 positional argument but 2 were given解决方案
- FFT(快速傅里叶变换):UVAoj 12298 - Super Poker II
- 存算一体——后摩尔时代的AI芯片架构
- 如何下载国外硕博论文?
- 瞎子摸象——shopnc篇
- excel组合汇总_Excel汇总20140414
- java8 access_Java语言8 连接Access数据库UCanAccess的操作介绍
- 算法试题——每日一练
- shineblink APDS-9960靠近感应及环境光强度测量
热门文章
- 类和对象之Scala程序
- 已安装 SQL Server 2005 Express 工具。若要继续,请删除 SQL Server 2005 Express 工具
- [JavaScript]面向对象编程
- python3 llvmlite源码_CentOS 7 64位环境下安装llvm以及python的llvmlite包
- 机械臂拉格朗日动力学怎么用matlab仿真_Matlab 机器人动力学参数辨识仿真(1)单摆的动力学参数辨识...
- Mac使用Docker搭建python测试执行环境
- [图文教程] 手把手教你安装Android SDK
- Json文件转Map(四)之代码
- Spring AOP(三)之AfterThrowing增强处理
- [渝粤教育] 盐城工学院 大学物理(力学、振动与波动) 参考 资料