IDA问题相关

1.当想使用F5时出现“please position the cursor within a function”,那么就创建函数,但是创建时出现“The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.”则需要对选定代码创建函数。IDA默认到下一个函数开头(或者固定函数结尾标志),所以难免会出现问题。

转:https://bbs.pediy.com/thread-158896.htm

高手飘过~,本文章只想让搜索引擎收录,以便那些新手查找的。

如图,


代码是红色的,就是说IDA没有分析出来,为了方便分析,我们会用快捷键P(Create Function) 来创建函数.只是我们在函数头部 按P的时候 总会提示

The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.

大家注意 retn  后面两行多余的代码,这是罪魁祸首.如果我们不能创建函数,就不能使用F5来分析代码了,想让这些代码变绿色的方法(创建函数)很简单.
用鼠标从函数头部开始到 retn 结尾 拖一下,变成灰色.



然后用快捷键 P 或者右键菜单,CreateFunction 来创建函数就可以了。

用拖的方法,去创建一个函数的好处是,我们可以选择任意的一部分IDA分析不出来的代码(就是红色代码),成为一个绿色的代码(IDA可识别的代码).

当然了,到这里也不算完.下图是代码变绿色的,我用上面的方法创建函数了,可还是不能F5,



我们通过Stack Pointer 发现这个函数的堆栈是不平衡的.此时我们需要找接近retn 的 最后一个Call 然后去修正堆栈.



我们看到 retn 左边绿色的数字是 28,我们通过ALT + k 修正堆栈,把 28 retn 改成 0 就可以了。
修正堆栈的时候一定要选择 Call 然后修正堆栈,下图是修正后的 代码



很简单的一个东西,篇幅有点大了,可能存在一些问题,不过我的目的是F5就可以了 嘿嘿.

 ----------------------

-call analysis failed
成因:调用分析失败,未能成功解析参数位置和参数个数  程序会崩溃,程序会提供一个地址
对于间接调用类似call eax可使用设置调用地址
对于直接调用,查看调用目标的type 是否正确,可变参数是引发这种错误的主要原因之一
解决方法,找到出错的地址,对该指令使用快捷键y,修改目标函数的参数个数,参数个数根据push的个数而定。
原文地址:https://www.cnblogs.com/studyskill/p/7714485.html