汇编中Switch逆向基础(跳转表)

Posted xuexidememeda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编中Switch逆向基础(跳转表)相关的知识,希望对你有一定的参考价值。

跳转表产生的条件     应该是case 之间的差应该是大于4 小于一 定的数量吧 才会产生  如果跳转表太大的话性能也不高

过程

跳转表(case 不是太多也不是太少才会产生) 过程

先把Switch(a)  a中的数值减去 case: 中的最小值  假设这个值为B

然后再去判断case 中最大值-最小值 假设为 C

比较BC大小 如果 B>C(至于那些最大最小值人家怎么找的这我真不知道) 说明不再这个switch里面执行default 或者 跳出判断

如果 B<=C的话说明这个数在Switch里面 然后查表调转到相应的case语句(这个表大致构建为 从你最小的case 例如 为0x10  到你最大的case 例如为 0x30 即使你中间没那个case 判断 例如 0x11他也会构建的)

 

例如

Ja xxxx  这个是默认defult

Mov

Movzx edxByte PTR DS:[EDX*4+410CC]    这个数组是下标索引数组 可以通过查看下标的值

JMP DWORD  PTR DS:[EDX*4+410B4]  这个是跳转表(通过查上面的edx下标  dd 下标*4+410B4 可以查看要调转的位置)

 

技术图片

 

以上是关于汇编中Switch逆向基础(跳转表)的主要内容,如果未能解决你的问题,请参考以下文章

Android逆向-Android逆向基础10(so文件分析大合集)

20155210 实验一 逆向与Bof基础

自制反汇编逆向分析工具 迭代第六版本

switch...case跳转表

20145235李涛《网络对抗》逆向及Bof基础

RE-1 逆向分析基础