hex-rays官方发布了一套《Igor的IDA每周技巧》系列文章,内容不错,故进行跟踪翻译,期望对大家有所帮助。
第九篇原文:Igor’s tip of the week #09: Reanalysis
使用IDA时,有时需要重新分析IDB数据库的部分内容,例如:
- 修改外部函数的原型之后(特别是调用约定、返回时要清理的栈空间字节数、“不返回”标签)
- 修复自动检测失败的ARM/MIPS区域之后
- 修改了全局处理器选项之后(如设置$gp值为MIPS)
- 其它情况(如修改分析开关)
重分析单个指令
要重分析一个指令,将光标定位到指令的地址处,并按“c”键。即使这个地址处本身就是指令,按下按键也会执行完整重分析流程:
- 删除当前地址的交叉引用
- 处理器模块重新分析这个地址处的内容;重新分析会创建交叉引用,包括代码顺序流交叉引用。
重分析一个函数
改变函数的参数时,该函数的所有指令都需要被重分析(比如:此时需要重建栈上的变量)。所以,按下面的顺序按键将导致重分析整个函数:Alt+P(编辑函数),Enter(确认)。
译者:就是先打开编辑函数对话框,然后什么都不修改,直接点击确认。
重分析一大块指令
要进行该操作,可以使用选取操作那篇文章中介绍的技巧。
- 来到区域的起始位置
- 按下Alt+L(设置起始点)
- 到达区域的结束位置
按“c”(转换为代码)。在第一个弹出的对话框按“分析”,在第二个弹出的对话框按“否”。
重分析整个数据库
如果你想重新分析所有东西,但不想麻烦地去选取所有代码然后按“c”。IDA中有个“重分析整个程序”的专用命令,可以通过下面两个方法调用:
1、选项->通常->“分析”标签页->“重分析程序”;
2、在IDA窗口底部的状态栏右键,点击“重分析程序”;
欢迎关注我的微博:大雄_RE。专注软件逆向,分享最新的好文章、好工具,追踪行业大佬的研究成果。