IDA:将参数类型更改为本地类型

逆向工程 艾达 蟒蛇
2021-06-16 03:34:30

我有功能

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

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

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

from idaapi import *

tif = tinfo_t()
get_tinfo2(ea, tif)

funcdata = func_type_data_t()
tif.get_func_details(funcdata)

在此之后,我被卡住了,因为我找不到轻松创建/修改的方法funcdata[i].typetinfo_t对象。

我最后的手段是使用GuessType/GetType并修改之前的字符串SetType,但这可能有点复杂,因为某些参数是指向函数本身的指针。

任何建议将是最受欢迎的!

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)