我正在研究反转 C++ 应用程序,并且遇到了一个包含返回的 getter 函数的结构TypeDescriptor*,我阅读了一些关于 RTTI 和反转 C++ 的文章,但找不到与我所看到的匹配的结构.
由于getter,它似乎是编译器生成的结构TypeDescriptor?我希望有人能指出我正确的方向。有多个这样的结构,它们大多是连续的,但在我看来并不完全。
该结构的伪代码如下所示:
// These are all function pointers
class SomeClazz
{
// func1/func2 are pointers to the same function. It looks like a constructor.
void* func1(void* param1, void** param2);
void* func2(void* param1, void** param2);
// This function differs depending on the class. I believe this to be a implementation of a virtual function maybe?
virtual void handler();
// Returns a pointer to a RTTI TypeDescriptor depending on the class
TypeDescriptor* get_type_descriptor();
void get_something();
}
这是func1/2函数中的代码,以防万一它是什么:
undefined ** FUN_00125860(longlong param_1,undefined **param_2)
{
undefined4 uVar1;
undefined4 uVar2;
undefined4 uVar3;
*param_2 = (undefined *)&Vftable_maybe_00589ef0;
uVar1 = *(undefined4 *)(param_1 + 0xc);
uVar2 = *(undefined4 *)(param_1 + 0x10);
uVar3 = *(undefined4 *)(param_1 + 0x14);
*(undefined4 *)(param_2 + 1) = *(undefined4 *)(param_1 + 8);
*(undefined4 *)((longlong)param_2 + 0xc) = uVar1;
*(undefined4 *)(param_2 + 2) = uVar2;
*(undefined4 *)((longlong)param_2 + 0x14) = uVar3;
return param_2;
}
这是get_type_descriptor:
TypeDescriptor * class::get_type_descriptor(void)
{
return &class_<lambda_88a0d3301c644a20c1df3ad0c52a86e4>_RTTI_Type_Descriptor;
}
////////////
LEA RAX, [class_<lambda_88a0d3301c644a20c1df3ad0c52 ...]
RET
这是get_something,不确定目的是什么或它在做什么:
LEA RAX, [RCX+0x8]
RET
任何帮助/建议都会很棒。谢谢。