【问题标题】:Dereferencing **this and setting *this to zero?取消引用 **this 并将 *this 设置为零?
【发布时间】:2018-07-20 19:50:17
【问题描述】:

**this 被取消引用,然后它的值设置为零。有人可以解释这里发生了什么吗?其中一个函数是某个结构的构造函数,我想知道是哪个。

void **__thiscall PossiblyCtor1(void **this)
{
  void **ret;
  ret = this;
  *this = 0; // <- HERE
  PossiblyCtor2(this);
  return ret;
}

它是在 malloc 之后的一些其他函数的中间调用的:

--- unimportant code ---

v43 = (void **)Allocate(4u, v46, v47);
if ( v43 )
  v44 = PossiblyCtor1(v43); // <- CALL
else
  v44 = 0;

--- unimportant code ---

请原谅我的愚蠢名字,但这是来自 IDA 的逆向工程代码。

【问题讨论】:

  • v43 是指向(堆上的指针)的指针。如果分配成功,它会调用PossiblyCtor1,将第二个指针(堆上的那个)设置为NULL。有什么困惑?
  • @ThomasMatthews:这是逆向工程代码,不是有效的 C 或 C++。
  • @MooingDuck 等待,因此它将 NULL 设置为已分配堆的指针的“值”,然后将该 NULL ptr 作为 this/ecx 发送到某个结构的构造函数。所以这意味着 PossiblyCtor2 是实际的构造函数?
  • 信息太少无法说明,但如果名称准确,则可以。也许 2 是派生类或链式构造函数。也可能不是。
  • @MooingDuck 名称不一定准确,我自己重命名了,只有 Allocate 类似于 malloc 来自 IDA。但有一件事是肯定的,从PossiblyCtor1 返回的v44 被分配给已知(对我而言)结构的指针,稍后在代码中。实际对象是在PossiblyCtor2 中构造的,所以我想知道PossiblyCtor1 函数的目的是什么?某种包装器?

标签: c++ pointers constructor reverse-engineering dereference


【解决方案1】:

[已解决] 将 NULL 设置为已分配的指针的“值”(感谢 Mooing Duck 的帮助),然后将该 NULL ptr 作为“this”发送给某个对象的构造函数。

PossiblyCtor1 是一个实际的构造函数。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2015-12-31
    • 1970-01-01
    • 2018-04-09
    • 2021-05-07
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多