使用 IDA Python 迭代所有函数及其指令

逆向工程 艾达 蟒蛇
2021-06-26 10:21:30

我是 IDAPython 的新手。基本上,我想使用 ida python 脚本遍历 IDB 文件中的所有函数及其指令。最终目标是从 idapro 导出函数及其说明。以某种格式。

from idautils import *
from idaapi import *

ea = BeginEA()
for funcea in Functions(SegStart(ea), SegEnd(ea)):
    functionName = GetFunctionName(funcea)
    print functionName

使用上面的脚本我正在检索函数名称,现在我还想打印每个函数的汇编指令。我知道我可能必须使用 GetDisasm(ea),但不确定如何使用 API。

TIA

1个回答

请注意,它只会打印那些被 IDA 自动分析识别或手动定义的函数,与您的代码片段完全相同。此代码段未调试,使用风险自负。

from idautils import *
from idaapi import *
from idc import *

for segea in Segments():
    for funcea in Functions(segea, SegEnd(segea)):
        functionName = GetFunctionName(funcea)
        for (startea, endea) in Chunks(funcea):
            for head in Heads(startea, endea):
                print functionName, ":", "0x%08x"%(head), ":", GetDisasm(head)

如果您想将指令提取为二进制,您可以使用idc.NextHead函数来获取指令边界。

代码中提到的函数chunk和我们在IDA的graph view中看到的不一样(如果不连续,函数有不止一个chunk):graph view中的chunk被称为“基本块”,看更正确的定义通过链接。