知识点:
if else
逆向还原代码一、了解if else结构
sub esp,8
00401029  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0040102C  |.  3B45 F8       CMP EAX,DWORD PTR SS:[EBP-8]
0040102F  |.  7E 10         JLE SHORT ifelse01.00401041 //表示 else部分的开始
00401031  |.  68 FC204000   PUSH ifelse01.004020FC                   ; /format = "a>b"
00401036  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
0040103C  |.  83C4 04       ADD ESP,4
0040103F  |.  EB 0E        JMP SHORT ifelse01.0040104F //结合前边的 jle 401041 判断是否有else部分
00401041  |>  68 00214000   PUSH ifelse01.00402100                   ; /format = "b>=a"
00401046  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
0040104C  |.  83C4 04       ADD ESP,4二、逆向还原代码int a,b,c;
//00401006  |.  68 F4204000   PUSH ifelse01.004020F4                   ; /format = "begin"
//0040100B  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
//00401011  |.  83C4 04       ADD ESP,4printf("begin");
//00401014  |.  C745 FC 01000>MOV DWORD PTR SS:[EBP-4],1
//0040101B  |.  C745 F8 02000>MOV DWORD PTR SS:[EBP-8],2
//00401022  |.  C745 F4 03000>MOV DWORD PTR SS:[EBP-C],3 a=1,b=2,c=3;
//00401029  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
//0040102C  |.  3B45 F8       CMP EAX,DWORD PTR SS:[EBP-8]
//0040102F  |.  7E 10         JLE SHORT ifelse01.00401041
if (a>b)
{    //00401031  |.  68 FC204000   PUSH ifelse01.004020FC                   ; /format = "a>b"//00401036  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf//0040103C  |.  83C4 04       ADD ESP,4//0040103F  |.  EB 0E         JMP SHORT ifelse01.0040104Fprintf("a>b");
}else
{    //00401041  |>  68 00214000   PUSH ifelse01.00402100                   ; /format = "b>=a"//00401046  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf//0040104C  |.  83C4 04       ADD ESP,4printf("b>=a");
}
//0040104F  |> \8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]             ;  c
//00401052  |.  3B4D F8       CMP ECX,DWORD PTR SS:[EBP-8]             ;  b
//00401055  |.  7E 46         JLE SHORT ifelse01.0040109D              ;  if (c>b)
if (c>b)
{
//00401057  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C] c
//0040105A  |.  3B55 FC       CMP EDX,DWORD PTR SS:[EBP-4] a
//0040105D  |.  7E 20         JLE SHORT ifelse01.0040107Fif (c>a){
//0040105F  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
//00401062  |.  50            PUSH EAX                                 ; /<%d>
//00401063  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]             ; |
//00401066  |.  51            PUSH ECX                                 ; |<%d>
//00401067  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]             ; |
//0040106A  |.  52            PUSH EDX                                 ; |<%d>
//0040106B  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ; |
//0040106E  |.  50            PUSH EAX                                 ; |<%d>
//0040106F  |.  68 08214000   PUSH ifelse01.00402108                   ; |format = "%d>%d,%d>%d"
//00401074  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
//0040107A  |.  83C4 14       ADD ESP,14printf("%d>%d,%d>%d",c,b,c,a);
//0040107D  |.  EB 1E         JMP SHORT ifelse01.0040109D}else{
//0040107F  |>  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
//00401082  |.  51            PUSH ECX                                 ; /<%d>
//00401083  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]             ; |
//00401086  |.  52            PUSH EDX                                 ; |<%d>
//00401087  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ; |
//0040108A  |.  50            PUSH EAX                                 ; |<%d>
//0040108B  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]             ; |
//0040108E  |.  51            PUSH ECX                                 ; |<%d>
//0040108F  |.  68 14214000   PUSH ifelse01.00402114                   ; |format = "%d>%d,%d<=%d"
//00401094  |.  FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>]    ; \printf
//0040109A  |.  83C4 14       ADD ESP,14printf("%d>%d,%d<=%d",c,b,c,a);}
}
//0040109D  |>  33C0          XOR EAX,EAX

转载于:https://www.cnblogs.com/whzym111/p/6369144.html

汇编 if else相关推荐

  1. GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)

    C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理.编译.汇编和链接. 同样,使用 GCC 编译器编译 C 或者 C++ 程序,也必须要经历这 4 个过程.但考虑在实 ...

  2. 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...

  3. 经常使用ARM汇编指令

    一面学习,一面总结,一面记录. 以下是整理在网上找到的一些资料,简单整理记录一下,方便以后查阅. ARM处理器的指令集能够分为跳转指令.数据处理指令.程序状态寄存器(PSR)处理指令.载入/存储指令. ...

  4. 初学 Delphi 嵌入汇编[3] - 第一个 Delphi 与汇编的例子

    前面知道了一个汇编的赋值指令(MOV), 再了解一个加法指令(ADD), 就可以做个例子了. 譬如: ADD AX,BX; 这相当于 Delphi 中的 AX := AX + BX; 另外提前来个列表 ...

  5. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编

    Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...

  6. arm linux 启动之一:汇编启动到start_kernel

    描述arm linux启动的概要过程,以S5PV210(Cortex A8)为例,本文描述第一个阶段. 一.arm linux的引导 uboot在引导arm linux(uImage镜像)到SDRAM ...

  7. 32位汇编寄存器及汇编指令

    32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...

  8. 祝贺《WCF邮件通信系统》在高阳市场研究汇编第五期发表

    上次给公司的市场研究汇编投稿,只写了一个PPT格式的<WCF邮件通信系统>,编辑把它整理成了PDF格式的内容,感觉很好,所以我把PDF原文中的有关内容存储成了图片,发表在这里,庆贺一下. ...

  9. ATT汇编语言与GCC内嵌汇编简介

    AT&T汇编语言与GCC内嵌汇编简介 1 AT&T 与INTEL的汇编语言语法的区别 1.1大小写 1.2操作数赋值方向 1.3前缀 1.4间接寻址语法 1.5后缀 1.6指令 2 G ...

  10. Linux下的ATT语法(即GNU as 汇编语法)入门

    学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本和资料中都难以找到答案.程序员是追求完美的一个种群,其头 脑中哪怕是存在一点点的思维黑洞都会让其坐卧不宁.不久前在it ...

最新文章

  1. 如何检查一个Python字符串是否只包含数字?
  2. Centos 6 克隆导致网卡eth0变成eth1、及修改网卡名的方法
  3. iOS设计模式(02):单例模式
  4. jsonp解析 html
  5. DHCP服务搭建(1)
  6. Ubuntu18.04安装VCS、Verdi、dve全套教程亲测(有成功截图)
  7. win系统如何连接共享服务器,window7 pro 访问局域网内共享服务器
  8. kratos的返回值问题与错误返回问题
  9. php 检测变量中的回车键_PHP 的变量类型,变量检测
  10. FPGA状态机一段式
  11. 华为机试HJ32:密码截取
  12. hdu 1358 Period (KMP求循环次数)
  13. 标准软件开发过程 文档
  14. 浅析 Redis 复制
  15. CSDN上传资源无法设置积分了吗
  16. Jetpack LiveData
  17. 老A:抖音爆火的“弹幕互动游戏”是什么?该如何搭建直播间?
  18. 二、Vue 属性绑定、v-model的原理、绑定class、绑定style
  19. 汇通达再度冲刺港交所上市:整体毛利率低下,已有股东提前退出
  20. world quant global alphathon 全球总决赛 第二名经验分享

热门文章

  1. 熔池 沉积_用于3D打印的AI(第3部分):异常熔池分类的纠缠变分自动编码器
  2. 深入浅出SQL(1)
  3. 哪些钱借了可以不还?
  4. 《斑点狗眼里的世界》一书的铅笔画插图
  5. 胡玥的侦探小说《做局》及自传《时间之夜》
  6. Invert Binary Tree
  7. python self理解_Python面向对象总结,让你快速掌握面向对象常用的用法
  8. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
  9. linux gcc中sin30度,学习gcc.pdf
  10. 【Yoshua Bengio 亲自解答】机器学习 81 个问题及答案(最全收录)