ida使用时碰到的一些问题

版权声明:本文为博主原创文章, 未经博主允许, 可随意转载. https://blog.csdn.net/cqu20124793/article/details/83094498

1 IDA F5 write access to constant memory detected. output maybe wrong.

这个就shift+F7后选定对应地址所在区段(具体出问题的内存地址在output可以看到), 然后ctrl+e打开编辑器
在segment permissions里面对应属性加上, 另外segment class如果是code/rdata的, 也改成data. 改完后,重新去F5,基本就可以了.

2 positive sp value has been found

这种情况基本是函数内部的函数调用有问题, 某个函数的函数声明有问题. 此时option->general->disassembly->Display disassembly line parts->stack pointer前的勾打上, 就可以看到IDA view窗口前面多出000, 004, -004之类的. 这就是堆栈变化数字, 选中某一行, 按alt+k就可以调整堆栈变化. 去找有问题的函数, 或者粗暴地把末尾的正数改成负数, 按F5就行了. 不过详细分析的时候应该找找哪个函数的声明弄错了, 然后按Y改下就行了

3 函数属性中的does not return会造成的影响

某些情况下, 函数被IDA误认为does not return, 不返回, 那么此时会导致 函数识别出现问题, 函数可能后面有一堆代码就消失在了F5的窗口(注:问题1也会导致这)

4 IDA F5中出现一些例如HIBYTE, ROL, OFSUB之类的, 这些定义可以在IDA安装目录\plugins\defs.h中找到

5 IDA F5看函数代码, 有的时候函数识别返回值以及输入参数会有问题, 例如:

在这里插入图片描述
这里看到返回值为eax, 实际上有影响的包括eax, edx, cf,这函数返回后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种情况为了准确一般就得汇编和C结合起来看

6 IDA F5修改传入函数参数的时候, 对于传入参数紧跟着的那些参数, 可能都属于以传入参数开始的结构体的一员, 这个就进函数看赋值就行了.

7 shift+F11, 导入type lib. 有时用Y改类型会发现类型未定义…

这是因为dump出一块内存, 而仅仅一块内存(不像一整个完整的PE文件)没有标志用来识别这是什么编译器编译的, 所以IDA也就没有导入相应的库了, 得自己搞一下.

猜你喜欢

转载自blog.csdn.net/cqu20124793/article/details/83094498
今日推荐