IDA про это ключевое слово - PullRequest
1 голос
/ 25 декабря 2010

Мне интересно, что именно означает ключевое слово "this" в псевдо-C ++-коде IDA.

Допустим, у меня есть вызов функции:

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 Ответ

4 голосов
/ 25 декабря 2010

thiscall означает, что это функция-член класса, поэтому вы захотите переписать ее как

class MyClass {
   int sub_100010B3(const char* Str1);
};

MyClass::sub_100010B3(const char* Str1)
{
  // .. implementation
}
...