知识点:
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. DOS中的ECHO命令详解

    1. 作为控制批处理命令在执行时是否显示命令行自身的开关  格式:ECHO [ON|OFF]  如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”.  2. 显示当前ECHO ...

  2. fastclick select 闪退 bug

    这时候needsclick就派上用场了 <select class='needsclick'></select> 附上fastclick github上的链接

  3. cuda和gcc版本不兼容

    gcc8.1和cuda9.0版本不兼容,比较坑. 下面是各版本cuda支持的gcc: 从CUDA 4.1版本开始,现在支持gcc 4.5.gcc 4.6和4.7不受支持. 从CUDA 5.0版本开始, ...

  4. AOP编程报错Xlint:invalidAbsoluteTypeName

    @Component@Aspectpublic class DingdingAspect { private Logger logger = LoggerFactory.getLogger(this. ...

  5. Oracle EBS FTP显示无法与某IP 连接

    首先 用root用户登录 如果可以登录 那么应该是权限的问题 这里选择 方法二:修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示: ## Allow root to ...

  6. python set集合一些基本方法

    set集合是一个无序且不重复的元素集合 这个数据类型没有重复的,而且也没有顺序 一些基本的方法: 添加元素 s1 = {11, 22, 33} s1.add(123)#添加一个新的元素 print(s ...

  7. 第五次作业 hql查询

    hql查询是基于对象的查询,不是基于表的查询. 1.hql的简单查询 @Test public void queryUsers() { //简单查询 SessionFactory sf = null; ...

  8. C#程序如何捕捉未try/catch的异常——不弹“XXX已停止工作”报错框

    诚意满满直接上代码: static void Main(string[] args) { //Main函数中增加此句 AppDomain.CurrentDomain.UnhandledExceptio ...

  9. sql注入--mysql

    mysql数据库结构: 数据库A  --> 表名  --> 列名 --> 数据 数据库B  --> 表名  --> 列名 --> 数据 mysql数据库信息: my ...

  10. 【Alpha】团队课程展示

    团队展示报告 团队分工 陈涵 PM + 后端开发 ,统筹全队安排,完成了登录界面,以及一部分部门模块和课程中教室模块的编写. 张鹏 后端开发,主要完成了主界面和其他功能界面的编写,课程界面的编写,以及 ...