标签:大致 大小 执行 family style mil 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 可以查看要调转的位置)
图
标签:大致 大小 执行 family style mil switch 查看 最小
原文地址:https://www.cnblogs.com/xuexidememeda/p/11167423.html