知识点:
switch case生成的汇编框架
逆向汇编代码还原成C++代码 一、了解switch case结构
、普通情况
|. 83C4 ADD ESP,
|. C745 FC >MOV DWORD PTR SS:[EBP-], ; a=;
0040101B |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-]
0040101E |. F8 MOV DWORD PTR SS:[EBP-],EAX ; switch (a)
|. 837D F8 CMP DWORD PTR SS:[EBP-], ; case :
|. 0E JE SHORT switchCa.
|. 837D F8 CMP DWORD PTR SS:[EBP-], ; case :
0040102B |. JE SHORT switchCa.
0040102D |. 837D F8 CMP DWORD PTR SS:[EBP-], ; case :
|. JE SHORT switchCa.
|. EB JMP SHORT switchCa. ; default: 、跳转表 |. C745 FC >MOV DWORD PTR SS:[EBP-], ; a=;
0040101B |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-]
0040101E |. F8 MOV DWORD PTR SS:[EBP-],EAX ; b=a
|. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-] ; b==
|. 83E9 SUB ECX, ; a-0x3=跳转表数组大小
|. 894D F8 MOV DWORD PTR SS:[EBP-],ECX
0040102A |. 837D F8 0E CMP DWORD PTR SS:[EBP-],0E ; 0E=case最大常量-case最小常量
0040102E |. JA SHORT switchCa. ; default:
|. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-]
|. 0FB682 CC1040>MOVZX EAX,BYTE PTR DS:[EDX+4010CC] ; 跳转表的索引数组
0040103A |> FF2485 B41040>JMP DWORD PTR DS:[EAX*+4010B4] ; /跳转表
知识点:
入口函数main的定位
逆向汇编代码还原成C++代码
索引表数组
跳转表 一、索引表及跳转表分析
、确定case常量
,,,
、确定case常量顺序 (可以根据 跳转表 调整也可以)
000210AC 30.00021063
000210B0 30.00021053
000210B4 30.00021048
000210B8 30.00021089
//调整后 实际上就是按地址大小排序
000210B4 30.00021048
000210B0 30.00021053
000210AC 30.00021063
000210B8 30.00021089 二、还原代码
printf("begin");
int a,b; a=0x16; b=;
switch(a)
{
case :
b=b+a;
break;
case :
printf("");
break;
//18,20,28,32
case :
if (b>)
{
printf("");
}else
{
printf("");
}
break;
case :
printf("");
//break;
default:
printf("00end");
break;
}
//end

汇编 switch case的更多相关文章

  1. 逆向知识第九讲,switch case语句在汇编中表达的方式

    一丶Switch Case语句在汇编中的第一种表达方式 (引导性跳转表) 第一种表达方式生成条件: case 个数偏少,那么汇编中将会生成引导性的跳转表,会做出 if else的情况(类似,但还是能分 ...

  2. switch...case 和 if...else

    switch...case与if...else的根本区别在于: switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的,switc ...

  3. if语句,if...else if语句和switch...case语句的区别和分析

    前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...

  4. 为什么switch...case语句比if...else执行效率高

    在C语言中,教科书告诉我们switch...case...语句比if...else if...else执行效率要高,但这到底是为什么呢?本文尝试从汇编的角度予以分析并揭晓其中的奥秘. 第一步,写一个d ...

  5. 知识扩展--if...else...与switch...case...的执行原理

    一.简述 编程语言中的条件分支结构有两种:if-else和switch-case,这两种条件分支之间可以相互转换,但是也存在一些区别,那么什么时候该用if-else,什么时候该用switch-case ...

  6. if else和switch case那个效率更高一点

    switch...case写法: switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; } ...

  7. python中Switch/Case实现

    学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现.所以不妨自己来实现Switch/Case功能. 方法一 通过字典实现 ...

  8. javascript switch..... case

    switch(条件表达式) { case 常量: { 语句a; } break; case 常量: { 语句b; } break; case 常量: { 语句c; } break; ... case ...

  9. switch...case...语句分析(大表跟小表何时产生)

    一.switch...case...的格式 switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; break; case 常量表达式3: 语句; ...

随机推荐

  1. eclipse中如何使用struts2

    简介 这篇文章主要讲如何在eclipse中使用struts2,文章使用的struts2的版本是2.5.2,会与其他的版本有一小点的差别,文章里已经说明.例子的完整源码在文末,亲测没有任何错误. str ...

  2. 一种通过async/await实现函数同步执行的方式

    const testArr = [ () => { return new Promise((resolve, reject) => { setTimeout(()=> { alert ...

  3. gradle中的compileSdkVersion和buildToolsVersion

    CompileSdkVersion:编译版本,就是运行这个项目需要的SDK,即API Level. buildToolsVerson:是构建工具的版本,构建工具包括了打包工具aapt.dx等等. 注意 ...

  4. Azure Resource Manager 概述

    应用程序的基础结构通常由许多组件构成:可能有虚拟机.存储帐户和虚拟网络,或 Web 应用.数据库.数据库服务器和第三方服务. 这些组件不会以独立的实体出现,而是以单个实体的相关部件和依赖部件出现. 如 ...

  5. Python pip 安装与使用

    pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能. 目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具. Python 2 ...

  6. Windows10 家庭版没有本地组策略解决方法

    windows 家庭版默认是没有本地组策略的, win+R运行gpedit.msc提示不存在 下面的代码保存一个cmdorbat 脚本文件add_gpedit.cmd, 并执行 add_gpedit. ...

  7. Active Directory、Exchange、单点登录,企业账号统一管理解决方案

    现在的公司一般都会有很多内部管理系统,比如OA.ERP.CRM.邮件系统等.员工入职之后如果每个系统都创建一个账号和密码,首先员工记系统账号就是一件非常头疼的事情,如果公司有一百个系统那就得创建一百个 ...

  8. 2.3Python基础语法(三)之输入输出

    返回总目录 目录: 1.input输入 2.print输出 (一)input输入 1.input的处理方式 # 输入input string = input("请输入一个字符串:" ...

  9. October 21st 2017 Week 42nd Saturday

    Only I can change my life. No one can do it for me. 只有我可以改变我的命运,没有人可以帮我做. Stop complaining about the ...

  10. div+css ie6图片之间有间隙的问题

    图片转换为快级元素就解决了 img{display:block;} 也可设置img属性img{vertical-align:top;}