IDA про это ключевое слово
Мне интересно, что именно означает ключевое слово "this" в псевдокоде C++ IDA pro.
Допустим, у меня есть вызов функции:
v2 = sub_100010B3((int)&v12, "QtGui4.dll");
Который вызывает эту функцию:
int __thiscall sub_100010B3(int this, const char *Str1)
{
int result; // eax@2
int v3; // eax@4
int v4; // [sp+0h] [bp-8h]@1
int v5; // [sp+4h] [bp-4h]@1
v4 = this;
v5 = sub_10001090(this, 1);
if ( v5 )
{
while ( *(_DWORD *)(v5 + 16) )
{
v3 = sub_10001470(v4, *(_DWORD *)(v5 + 12));
if ( !stricmp(Str1, (const char *)v3) )
return v5;
v5 += 20;
}
result = 0;
}
else
{
result = 0;
}
return result;
}
Итак, в функции мы можем увидеть определение "int this", которое согласно документам является указателем на объект, который используется для вызова объекта. Что мне интересно, так это как я могу переписать функцию так, чтобы они работали одинаково, но не нуждались в передаче параметра this?
1 ответ
Решение
Thiscall означает, что это функция-член класса, поэтому вы захотите переписать ее как
class MyClass {
int sub_100010B3(const char* Str1);
};
MyClass::sub_100010B3(const char* Str1)
{
// .. implementation
}