伪代码中的对象引用表示

逆向工程 艾达 反编译 C++
2021-06-22 16:10:13

我试图了解函数调用是如何在 Hex Rays 的伪代码中表示的,特别是如果调用需要指向对象的指针。

假设我正在查看名为MyObject1::Start()的函数中的一行代码

MyObject2::doSomething(*((_DWORD *)this + 38), (char *)this + 104);

这是否意味着,它调用函数DoSomething的MyObject2并将两个引用的成员MyObject1作为参数?

如果是这样,我如何识别这些通过的成员?例如,“this + 38”是什么意思?

1个回答

this+38 和 this+104 很可能是当前对象的数据成员。

您可以通过查找使用它们的上下文来弄清楚它们的含义。
以这个代码为例

int a;
for(int i = 0;i < strlen(this+38); i++){
   if((this+38)[i] == 'a'){
      a++
   }
}

要弄清楚什么是 a,您需要查看它在什么上下文中使用。在这里您可以清楚地看到,每次字符 'a' 出现在 (this+38) 中时 a 都会递增,由此您可以推断 (this+38) 是一个字符数组,并且一个变量会计算出有多少个 'a'出现在这个+38(字符串)