汇编中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 edx,Byte PTR DS:[EDX*4+410CC] 这个数组是下标索引数组 可以通过查看下标的值
JMP DWORD PTR DS:[EDX*4+410B4] 这个是跳转表(通过查上面的edx下标 dd 下标*4+410B4 可以查看要调转的位置)
图
以上是关于汇编中Switch逆向基础(跳转表)的主要内容,如果未能解决你的问题,请参考以下文章