解析声明时未识别参数类型

逆向工程 艾达 二元分析 蟒蛇 idapro-sdk ida插件
2021-06-27 05:26:12

我正在尝试在包含函数名称的 IDA 数据库中添加一个动态导入段,并且我正在对其应用类型信息,以便apply_callee_tinfo在我发现对这个动态导入函数的调用时可以通过使用来获取参数位置

在测试时,我发现对于某些声明,无法识别参数或返回类型。IDA 给出了数字类型。

在此处输入图片说明

使用的代码是

def add_from_declaration(declarations):
    dyn_imp_seg_loc = 0x10000
    dyn_imp_seg_loc_end = 0x10000 + len(declarations.keys()) * 4
    idaapi.add_segm(0, dyn_imp_seg_loc, dyn_imp_seg_loc_end, "DYN_IMP", "XTRN")
    t_loc = dyn_imp_seg_loc
    not_applied = []
    for proc_name in declarations:
        decl = str(declarations[proc_name])
        print(decl)
        try:
            name, types, fields = idc.ParseType(decl, 0)
            success = idc.MakeName(t_loc, str(proc_name))
            t = idaapi.tinfo_t()
            til = idaapi.til_t()
            t.deserialize(til, types, fields)
            if success:
                idc.MakeDword(t_loc)
                success = idaapi.apply_tinfo(t_loc, t, 1)
                if not success:
                    not_applied.append(proc_name)
        except Exception:
            continue
        finally:
            t_loc = t_loc + 4
    return not_applied

declarations是一个以键为函数名、以值为声明的字典。我做错了什么?

编辑:我的方法基于此线程中提供的答案,在 IDA 中,有没有办法将动态导入函数的引用添加到“导入”选项卡中?. 我的问题不在于添加导入段或创建交叉引用。但我无法向名称添加类型信息。

从图片中可以看出,我正在尝试BOOL __stdcall ReleaseMutex(HANDLE a0);在名为 0x10000 的位置应用声明ReleaseMutex,但即使在成功解析声明后,IDA 也无法识别BOOLHANDLE构建。

0个回答
没有发现任何回复~