IDA修复跳表

1 篇文章 0 订阅

一、 IDA打开遇到JUMP CS命令

在这里插入图片描述

  • 这是由于GCC在编译超过5个switch的结构时会用跳表进行优化,变成上面的样子

二、使用EDIT --> other --> specify switch

  • 将光标打在JUMP命令上按TAB键切换到汇编,然后才能进行编辑
  • 我解释一下各个参数的意义
    在这里插入图片描述
Address of Jump table:跳表的地址,cmp eax 5,之后跳到的地址,这里就是0x69E0
Number of elements:switch 的个数,先前cmp eax 5,加一个default这里填6
Size of table element:switcj 的 element 的类型,这里eax 可以看出占4个字节
Element shift amount:这个一般情况下都是零,和跳表计算时的方式有关,比如此题只是单纯的跳表地址加跳表中的元素,那么就不需要移位
Element base value:设置为计算跳转地址时给跳表元素加的值,比如此题的计算方法为 &jump_table + jump_table[i],那么这里就应该填跳表的地址
Start of the switch idiom:这个默认就行,就是获取跳表值的语句的地址
Input register of switch:设置为用于给跳表寻址的寄存器
First(lowest) input value:就是 switch 的最小值了
Default jump address:也就是 default 的跳转位置,其实有时候可以不填,但是最好还是填上,这个一般在上方不远处的 cmp 指令附近。

跳表修复后,F5

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值