知识点:
if else
逆向还原代码 一、了解if else结构
sub esp,
|. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-]
0040102C |. 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-]
0040102F |. 7E JLE SHORT ifelse01. //表示 else部分的开始
|. FC204000 PUSH ifelse01.004020FC ; /format = "a>b"
|. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040103C |. 83C4 ADD ESP,
0040103F |. EB 0E JMP SHORT ifelse01.0040104F //结合前边的 jle 401041 判断是否有else部分
|> PUSH ifelse01. ; /format = "b>=a"
|. FF15 A0204000 CALL DWORD PTR DS:[<&MSVCR90.printf>] ; \printf
0040104C |. 83C4 ADD ESP, 二、逆向还原代码
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,4
printf("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.0040104F
printf("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,4
printf("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.0040107F
if (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,14
printf("%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,14
printf("%d>%d,%d<=%d",c,b,c,a);
}
}
//0040109D |> 33C0 XOR EAX,EAX

汇编 if else的更多相关文章

  1. u-boot源码汇编段简要分析

    Hi,大家好!我是CrazyCatJack,你们可以叫我CCJ或者疯猫.今天我给大家带来的是u-boot的源代码汇编段分析,以后还会给大家讲解后续的C代码,请持续关注哦^_^ 先简单说一下u-boot ...

  2. GCC 预处理、编译、汇编、链接..

    1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...

  3. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  4. Beennan的内嵌汇编指导(译)Brennan's Guide to Inline Assembly

    注:写在前面,这是一篇翻译文章,本人的英文水平很有限,但内嵌汇编是学习操作系统不可少的知识,本人也常去查看这方面的内容,本文是在做mit的jos实验中的一篇关于内嵌汇编的介绍.关于常用的内嵌汇编(AT ...

  5. 从linux0.11中起动部分代码看汇编调用c语言函数

    上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...

  6. C内嵌汇编-格式

    C内嵌汇编-格式: __asm__(汇编语句部分:输出部分:输入部分破坏描述部分);C内嵌汇编以关键字"__asm__"或"asm"开始, 下辖四个部分, 各部 ...

  7. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  8. C程序汇编运行模式简析

    SJTUBEAR 原创作品转载请注明出处 /<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 汇编 ...

  9. 生成ARM汇编

    使用ndk即可生成arm汇编 1.首先写好hello.c 2.编写makefile #ndk根目录 NDK_ROOT=E:\Android\android-ndk-r10b #编译器根目录 TOOLC ...

  10. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

随机推荐

  1. springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本 get请求报400 异常信息为 The valid characters are defined in RFC 7230 and RFC 3986

    1.springboot 1.3.5升级1.5.9后 默认使用tomcat 8.5版本而之前用的是tomcat7    get请求报400 异常信息为 The valid characters are ...

  2. Azure 元数据服务:适用于 Windows VM 的计划事件(预览)

    计划事件是 Azure 元数据服务中的其中一个子服务. 它负责显示有关即将发生的事件(例如,重新启动)的信息,使应用程序可以为其做准备并限制中断. 它可用于所有 Azure 虚拟机类型(包括 PaaS ...

  3. 用于创建和管理 Azure 虚拟机的常用 PowerShell 命令

    本文介绍一些可用于在 Azure 订阅中创建和管理虚拟机的 Azure PowerShell 命令. 若要获取特定命令行开关和选项的详细帮助,可以使用 Get-Help 命令. 有关安装最新版 Azu ...

  4. cookie 组成结构

    1.用抓包工具 fidller 只能看到 cookie 的 name 和 value 两个参数,实际上 cookie 还有其 它参数 2.以下是一个完整的 cookie 组成结构 cookie ={u ...

  5. Sql server 账号被锁住:"the account is currently locked out. The system administrator can unlock it."的解决办法(转载)

    今天遇到的问题比较有意思.首先是很久没有打开测试数据库了,今天打开,使用service程序测试的时候出现下面的错误提示:Message: System.Data.SqlClient.SqlExcept ...

  6. 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法

    在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法 在Eclipse中运行Jboss时,时间太长可能有时候会出现java ...

  7. ssh中文手册

    ssh-keygen 中文手册 sshd_config 中文手册 sshd 中文手册

  8. Asp连接Oracle (包含绿色版12.2客户端和ODBC驱动安装)

    我能操作的终端电脑是一台linux系统可以上互联网 ,服务器在部署在独立的私网上,不方便上互联网.服务器是2008R2.安装vs不是很方便.其所linux下作开发不是不可以,java php mono ...

  9. Objects聚合分组,统计结果个数(Count)

    参考:http://python.usyiyi.cn/django/topics/db/aggregation.html from django.db.models import Count toda ...

  10. Python通过LDAP验证、查找用户(class,logging)

    定义一个类,用于初始化ldap连接,验证.查找用户等功能 # -*- coding: UTF-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...