我在IDA Pro中有一个具有大量功能的DLL。我想制作一个脚本,可以扫描每个函数中的指令以查找特定指令。对于我现在的特定情况,我正在寻找向左移动(shl)的函数。我不确定哪个寄存器要转移,所以我想保持它的通用性。我确实知道在这种特定情况下只能转移一位。

我在非常基本的级别上了解python,而在不存在的级别上了解IDA-Python。请帮助我提供有关如何在IDA中访问此数据的建议。

编辑:
我已阅读了此问题,并说无法直接访问具有以下功能的函数列表被IDA发现。您必须指定一个起始函数地址。有没有更好的方法列出功能?

#1 楼

在反汇编窗口的“文本视图”中,按Alt +T。在“文本搜索”窗口中,搜索shl并检查Find all occurrences



OK,您将获取包含shl的所有功能的列表:



评论


我没有发生过的facepalm ...

–0xea
13年7月17日在14:00

如此简单,但对我来说却非常合适。它还允许使用简单过滤器ctrl + F来按功能名称前缀限制列表。谢谢!

– WMIF
13年7月17日在23:57

#2 楼

最好的选择是使用IDAPython API进行此操作。

要遍历所有功能,可以执行以下操作:

from idautils import *
from idaapi import *

ea = BeginEA()
for funcea in Functions(SegStart(ea), SegEnd(ea)):
    functionName = GetFunctionName(funcea)
    functionStart = "0x%08x"%funcea
    functionEnd = "0x%08x"%FindFuncEnd(funcea)
    # ...


在函数的开头和结尾,您可以遍历它们之间的所有有效地址,并使用GetMnem()获取该地址上的指令。当然,您需要处理一些特定的情况,指令大小以及所有这些,但这是一般的想法。

评论


函数块可能存在于起始地址和结束地址之间的地址范围之外,实际上我的项目就是这种情况。 IDA在执行您建议的步骤时是否考虑到这一点?

– WMIF
13年7月17日在23:22

是的,我知道这一点,这就是为什么我说您需要处理特定的情况,只是在ida python上举了一个简短的示例...真的不确定如何处理您建议的问题

–0xea
13年7月18日在18:17

您可以遍历文本段中的所有代码,但是将数据放入代码中可能会出错。

–Milhous
15年9月23日在18:04