【发布时间】: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