这是要求,64位还是有地方不同的
1.这个rcx像是基地址后面的找表和跳转都要用到。在倒数第四行就是把这个00007FF623180000 给rcx给它存着先。
2.然后找表,表里面存的数给eax。
3.然后这个rcx和rax相加就得到了,应该跳转的地方 。
这个是我做的普通的表。


下面是作业

1、写一个switch语句,不生产大表也不生产小表,贴出对应的反汇编.

#include <iostream>
using namespace std;
int main()
{int a = 3;   switch (a){case 1:printf("a");break;case 2:printf("b");break;case 3:printf("c");break;default:printf("error");break;}return 0;
}
  mov         eax,dword ptr [a]  mov         dword ptr [rbp+0D4h],eax  cmp         dword ptr [rbp+0D4h],1  je          main+48h (07FF620B92148h)  cmp         dword ptr [rbp+0D4h],2  je          main+56h (07FF620B92156h)  cmp         dword ptr [rbp+0D4h],3  je          main+64h (07FF620B92164h)  jmp         main+72h (07FF620B92172h)

就是相等就跳,不相等就跳default。

2、写一个switch语句,只生成大表,贴出对应的反汇编.

#include <iostream>
using namespace std;int main()
{int a = 3;   switch (a){case 1:printf("a");break;case 2:printf("b");break;case 3:printf("c");break;case 4:printf("d");break;case 5:printf("e");break;case 6:printf("f");break;default:printf("error");break;}return 0;
}
 lea         rcx,[__ImageBase (07FF7D5EE0000h)]  mov         eax,dword ptr [rcx+rax*4+121C8h]  add         rax,rcx  jmp         rax

这个是找表的过程
下面的是表,表都是八个字节的然后再加上rcx就可以找到应该跳的地方。

emm,找不到小表。或者可以这么说在x86里,大表里的地址就直接跳转了,当中间不连续很多的时候采用小表,小表里面里的值就是大表的排序,然后根据小表的序号找大表,这样可以节省空间。

滴水逆向 switch相关推荐

  1. 滴水逆向4月16日学习

    滴水逆向 进制 1>.进制的定义: 十进制的定义:由十个符号组成,分别是0,1,2,3,4,5,6,7,8,9,逢十进一. 八进制的定义:由八个符号组成,分别是0,1,2,3,4,5,6,7,逢 ...

  2. 滴水逆向win32学习笔记1

    滴水逆向win32学习笔记 一.字符编码 基本介绍 关于utf-16.utf-8和unicode的关系 BOM头 二.宽字符 基本介绍 常用函数 三.Win32 API中的宽字符 什么是win32 A ...

  3. b站滴水逆向课后练习(入伍停更中)

    B站滴水逆向,想学习逆向知识的一起学习吧! 评论区有热心网友提供了全部课件,真心非常感谢! 提取链接:https://pan.baidu.com/s/1YwUP9I7Vctqiq1sOW9feBA 提 ...

  4. 滴水逆向三期实践1:PE头字段解析,附PE结构下载

    视频资源详见网盘搜索 或 在线的B站滴水逆向三期 其课件也能在CSDN或百度搜索到,以下部分为课件内容摘要,部分为自己的理解 最后附上详细注释的自写代码 PE(Portable Executable) ...

  5. 静态链接库,动态链接库【滴水逆向三期48笔记】

    在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...

  6. 滴水逆向三期笔记与作业——02C语言——02数据类型

    海哥牛逼 这里写自定义目录标题 一.C语言如何变成汇编 1.裸函数 二.调用约定 1.常见的几种调用约定 三.程序的真正入口 四.数据类型 4.1 C语言中的数据类型 作业 一.C语言如何变成汇编 1 ...

  7. 【滴水逆向笔记】C语言指针

    文章目录 一.带*类型变量的赋值 二.&符号 三.数组指针 四.CE初探 五.字符串指针 1.实现strlen判断长度 2.实现strcpy复制长度 3.strcat字符串拼接 4.strcm ...

  8. 【滴水逆向笔记】C语言结构体

    文章目录 正文 正文 有一个问题,比如在游戏里 这些东西放到数组里肯定是不行的,因为数组要求数据类型是一样的 但是结构体,想存多少存多少,想存多少字节存多少个 struct AA {int 生命;in ...

  9. 滴水逆向三期 win10 ASLR UnmapViewOfSection傀儡进程 加密壳项目

    特意加了一个win10标题, 碰到0xc0000005的朋友就不要再浪费时间了, 我在这个问题上花了整整一天 网上全是xp的代码, 搜到了了几个win10的也是同样的错误没法解决, 唯一一个有用的答案 ...

最新文章

  1. 大数据背后的神秘定理:贝叶斯公式
  2. 未转变者怎么重置服务器,未转变者怎么把服务器关掉 | 手游网游页游攻略大全...
  3. 20返回指针的函数与指向函数的指针
  4. Keepalived高可用集群来实现web服务器负载均衡集群
  5. opencv进阶学习笔记4:ROI和泛洪扩充
  6. spring的controller是单例模式,但是是多线程,各个线程之间不影响
  7. [Unity][FlowCanvas] FlowScript 实现切换当前 CineMachine 摄像机
  8. java extern的作用_学习笔记之20-static和extern关键字2-对变量的作用
  9. 美国AI公司宣称特制3D面具破解刷脸支付系统,支付宝、微信:能破解 我全赔...
  10. Azure Data Science Virtual Machine Linux的初步体验
  11. EasyRecovery易恢复15免费数据恢复软件功能介绍
  12. java车牌识别字符分割_opencv 车牌字符分割 ANN网络识别字符
  13. 基于stm32这种单片机将变量定义到绝对地址中
  14. 在vue项目中插入视频
  15. doctrine2 mysql_Hello Doctrine2
  16. 关于NBMA网络基于RIP、HDLC、PPP,MGRE环境下实现所有PC互通
  17. MEMS智能传感器技术的新进展
  18. python基础-模仿醉汉在二维空间上的随机漫步
  19. 简单的python装b代码_一秒学会,小白也能上手,最简单的装逼代码
  20. 浅析计算机主板故障,浅析计算机主板故障及维修

热门文章

  1. 梦泪的服务器是qq还是微信,梦泪发现微信区1奇特现象,赛季末分数远不如QQ区,看到1细节,懂了...
  2. 5g网络技术目前怎么样?5g网络什么时候出?
  3. DanmuPlayer插件获取数据库弹幕——ssm弹幕应用
  4. 争对让望对思野葛对山栀注解_解析
  5. React Native ---fetch 之GET请求带参数
  6. 大数数字读法 unsigned long long
  7. 2021年计算机二级考试系统是哪个版本?
  8. 华为路由TC7102实现一根网线分离同时支持路由器无线网络使用和电信IPTV机顶盒播放的方法步骤
  9. jq的深浅复制:extend()
  10. 国内首笔!蚂蚁金服完成全流程零人工干预 AI 保险理赔