如何在 IDA Pro 中使用 IDA Python 获取函数签名

逆向工程 艾达 蟒蛇 Python ida插件
2021-06-13 01:18:07

我在 IDA 中打开 .exe 文件并附加了 .pdb,因此 IDA 扫描 .pdb 并显示函数名称。

我需要获取许多函数的签名字符串不能这样做手工,所以我想用内置它IDA的Python控制台

例如:地址00007FF68E528660上的函数有签名int __fastcall lua_error(lua_State *L)

我得到了我的函数地址 (ea)

def GetFunctionByName(name):
    ea = BeginEA()
    for funcAddr in Functions(SegStart(ea), SegEnd(ea)):
        funcName = GetFunctionName(funcAddr)
        if funcName == name:
            return funcAddr
    return None
print function_i_need(GetFunctionByName("lua_error"))

#should print "int __fastcall lua_error(lua_State *L)" or something familiar

我不知道如何实施 function_i_need

如何使用 python 代码获取该签名字符串?

1个回答

如果你可以使用 idc 或将 idc 适配到 python 你可以做这样的事情

#include <idc.idc>
static main() 
{
    auto funfirst,funnext,i = 0;
    funfirst = get_next_func( MinEA() );
    while (funnext != BADADDR) 
    {
        Message("fun[%04d] %x %s\n" ,i++ , funfirst, get_name(funfirst,GN_DEMANGLED));
        funnext = get_next_func(funfirst); 
        funfirst = funnext;
    }
}

应该产生如下名称

fun[0000] 180001008 private: static long AppContainerRegistration::CreateAppContainerKeySecurityDescriptor(struct _GUID const *,void *,void *,void *,unsigned long,unsigned long *,void * *,unsigned short *)
fun[0001] 1800014e0 UrlHashW
fun[0002] 180001590 UrlHashA
fun[0003] 1800015e8 void _HashData(unsigned char const *,unsigned long,unsigned char *,unsigned long)
fun[0004] 180001660 SystemTimeToTzSpecificLocalTimeEx
fun[0005] 18000190c AddTimeZoneRules
fun[0006] 180001ad4 AddTimeZoneRule
fun[0007] 180001b28 RtlpGetLastBias
fun[0008] 180001b60 StrRChrIW
fun[0009] 180001bcc public: long StateSpace::CreateSystemAppDataRoamingSubkey(struct HKEY__ * *)