这是某种铸造功能吗?如果是这样,为什么是__thiscall?

问题描述

我正在对一个程序进行逆向工程,发现一个成员方法如下所示:

int __thiscall sub_40A490(void *this)
{
    return *(_DWORD *)this;
}

IDA 生成了这段代码,原来的程序集是这样的:

sub_      proc near              
          mov     eax,[ecx]
          retn
sub_      endp

这是什么?如果它是一个简单的演员表,为什么它是一个 __thiscall

这个函数有很多交叉引用。例如,我们在这里称它为:

char __cdecl sub_4011B0(int a1,int a2)
{
    char v2; // bl
    int v3; // esi
    _DWORD *v4; // eax
    int v5; // eax
    
    if ( !a1 || !a2 )
        return 0;
    v2 = byte_593B70[4 * *(_DWORD *)(a1 + 504) + *(_DWORD *)(a2 + 504)];
    if ( !v2 )
    {
        v3 = 0;
        if ( sub_40A490((void *)(a1 + 1196)) > 0 )
        {
            while ( 1 )
            {
                v4 = (_DWORD *)sub_40A480(v3);
                v5 = sub_40A0E0(*v4);
                if ( v5 )
                {
                    if ( *(_DWORD *)(v5 + 44) == *(_DWORD *)(a2 + 44) )
                        return 1;
                }
                else
                {
                    sub_4CE390(v3);
                }
                if ( ++v3 >= sub_40A490((void *)(a1 + 1196)) )
                    return 0;
            }
        }
    }
    return v2;
}

解决方法

可能是解决方案:来自评论

“在我看来 sub_40A490 是某个类的成员函数,它返回一个 _DWORD 成员,这是该类的第一个成员。”

——弗朗索瓦·安德里厄