我有函数

foo_0(...,_ v0,...)
foo_1(...,_ v1,...)
...


而且,对于每对(foo_x, _ v_x),我想将声明中的v_x的类型更改为ANIMAL *,其中ANIMAL是本地类型。

我从这个问题中回收了一些代码,如下所示:

找不到轻松创建/修改的方法。

我最后的选择是使用funcdata[i].type / tinfo_t并在GuessType之前修改字符串,但这可能有点复杂,因为某些参数是函数本身的指针。建议将是最欢迎的!

#1 楼

这对我有用(可能需要对guess_tinfoget_func_details进行检查)

tif = idaapi.tinfo_t()
ida_typeinf.guess_tinfo(ea,tif)                     
funcdata = idaapi.func_type_data_t()
tif.get_func_details(funcdata)
tif2 = idaapi.tinfo_t()
tif2.get_named_type(idaapi.get_idati(),"ANIMAL")       #tif2 = ANIMAL
tif3 = tinfo_t()
tif3.create_ptr(tif2)                                  #tif3 = ANIMAL *
funcdata[argnum].type = tif3                           #replace corresponding argument
function_tinfo = idaapi.tinfo_t()
function_tinfo.create_func(funcdata)
idaapi.apply_tinfo2(ea, function_tinfo, idaapi.TINFO_DEFINITE)