idapython cfunc_t.treeitems 总是空的

逆向工程 艾达 蟒蛇 AST
2021-07-10 05:39:36

我正在使用 hexray api 获取通过反编译函数获得的 AST 树(ctree)的所有项目。

不幸的是,treeitems 向量总是空的。具体来说,此代码中的函数 paaaa 始终返回“0”或“E”。

from idautils import *
from idaapi import *
import idc
import ida_hexrays as hexray

def load_hex_ray():
    if not init_hexrays_plugin():
        idc.RunPlugin("hexx64", 0)
    if not init_hexrays_plugin():
        idc.RunPlugin("hexrays", 0)
    if not init_hexrays_plugin():
        idc.RunPlugin("hexarm", 0)

def paaaaa(address):
        try:
            cfun=hexray.decompile(address)
            #if I print cfun it shows correct decompiled code.
            cfun.refcnt=cfun.refcnt+1
            cfun.build_c_tree()
            return str((cfun.treeitems.size()))
        except:
            return 'E'

load_hex_ray()
#code that compute functions addresses and calls paaaaa

知道什么是错误的吗?我使用的是旧版本的 IDA 7.0

1个回答

即使我不完全理解为什么这个解决方案有效,我也解决了这个问题:

def paaaaa(address):
    try:
        cfun=hexray.decompile(address)
        print(cfun)
        return str((cfun.treeitems.size()))
    except:
        return 'E'

可能是打印强制 ida 正确填充 ctree。我不明白为什么 api cfun.build_c_tree() 不这样做。

但是,就目前而言,我对这种解决方法感到满意。