今天在逆向路由器固件时 ida 没有自动恢复 switch 跳转表,于是尝试手动恢复了一下,发现跳转表不是通过立即数加载到寄存器中的:
图片描述
而是从栈中读取的:
图片描述
这样就导致了 ida 无法恢复 switch 语句。
经过探索发现跳转表在前面被保存到了栈中:
图片描述
再经过了一些尝试之后,发现只要将 address of jump table 改为真正跳转表的地址就可以恢复啦
图片描述
图片描述

最新回复:
caolinkai 2024-03-09 12:36:34
感谢分享