汇编 switch case
知识点:
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的更多相关文章
- 逆向知识第九讲,switch case语句在汇编中表达的方式
一丶Switch Case语句在汇编中的第一种表达方式 (引导性跳转表) 第一种表达方式生成条件: case 个数偏少,那么汇编中将会生成引导性的跳转表,会做出 if else的情况(类似,但还是能分 ...
- switch...case 和 if...else
switch...case与if...else的根本区别在于: switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的,switc ...
- if语句,if...else if语句和switch...case语句的区别和分析
前段时间在工作中遇到了一个关于条件判断语句的问题,在if语句,if else if语句和switch case语句这三者之间分析,使用其中最有效率的一种方法. 所以就将这个问题作为自己第一篇博客的主要 ...
- 为什么switch...case语句比if...else执行效率高
在C语言中,教科书告诉我们switch...case...语句比if...else if...else执行效率要高,但这到底是为什么呢?本文尝试从汇编的角度予以分析并揭晓其中的奥秘. 第一步,写一个d ...
- 知识扩展--if...else...与switch...case...的执行原理
一.简述 编程语言中的条件分支结构有两种:if-else和switch-case,这两种条件分支之间可以相互转换,但是也存在一些区别,那么什么时候该用if-else,什么时候该用switch-case ...
- if else和switch case那个效率更高一点
switch...case写法: switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句2 break; ... default : 语句n break; } ...
- python中Switch/Case实现
学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现.所以不妨自己来实现Switch/Case功能. 方法一 通过字典实现 ...
- javascript switch..... case
switch(条件表达式) { case 常量: { 语句a; } break; case 常量: { 语句b; } break; case 常量: { 语句c; } break; ... case ...
- switch...case...语句分析(大表跟小表何时产生)
一.switch...case...的格式 switch(表达式) { case 常量表达式1: 语句; break; case 常量表达式2: 语句; break; case 常量表达式3: 语句; ...
随机推荐
- 关于css样式文件和less的文件的比较说明
1.css文件 css文件主要的用途是对网页中字体.颜色.背景.图像及其他各种元素的控制,使网页能够完全按照设计者的要求来显示.相信大家都对css比较了解了,再次不作过多说明. 2.less文件 Le ...
- Vue.js入门系列(一)
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
- svn目标计算机主动拒绝
这两天上传文件到服务器端,总是提示“ 目标计算机主动拒绝”. 后来排查,是受到360杀毒软件的文件系统实时防护功能影响. 虽然服务器端已经将仓库目录添加进360杀毒的白名单,但随着用户不断更新文件,文 ...
- LeetCode题解之 Convert Sorted Array to Binary Search Tree
1.题目描述 2.问题分析 使用二分法即可. 3.代码 TreeNode* sortedArrayToBST(vector<int>& nums) { ) return NULL; ...
- Oracle EBS OPM 子库存转移
--子库存转移 --created by jenrry DECLARE l_mtl_txn_rec mtl_transactions_interface%ROWTYPE; l_mtl_txn_lot_ ...
- windows-oracle 11g dataguard with dgbroker
一: DG的配置 oracle dg 考验dba综合能力.首先明确3个知识点: SID, SERVICE_NAME,,DB_NAME, DB_UNIQUE_NAME SID: 实例名,用于标识一个数据 ...
- rsync 数据同步
什么是Rsync? Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地货远程数据同步备份的优秀工具.适用于unix/linux/windows等多种操作系统平台. Rsync具有可使本地 ...
- 脱壳_00_压缩壳_ASPACK
写在前面的话: Aspack是最常见的一种压缩壳,具有较好的兼容性.压缩率和稳定性,今天我们就来一起分析一下这个壳: 零.分析压缩壳: 0.在开始动态调试前,用PEID和LoadPE查看一些信息,做到 ...
- LAMP平台的搭建及应用
实验要求 1.构建PHP运行环境,实现LAMP协同架构,前提条件是服务器中已经编译好了Apache HTTP Server和MySQL数据库,(编译安装apache和编译安装mysql 请查看公众号L ...
- XtraEditors四、TextEdit、ButtonEdit、PictureEdit、RadioGroup、PopupContainerEdit
TextEdit控件 以文本框的形式绑定各种形式的选择框: 文本框设置 输入 密码 字符 时, 要有 * 号掩盖输入的字符, 代码如下: textEdit1.Properties.PasswordCh ...