我正在阅读某人的代码,他正在调用这样的函数。该块中的“this”是指向虚方法表的指针,并且他使用偏移来调用所述表中的函数。如果你想知道这是一个黑客的事情。
__asm
{
MOV EDI, this
LEA ECX, [EDI + 0x4]
MOV EDX, DWORD PTR DS:[ECX]
CALL [EDX + 0x24]
}
他有更简单的代码,只是调用“this”+偏移量,但我对这个代码的内容感到困惑。我可以从Ida发布vtable转储,如果这会有所帮助。
答案 0 :(得分:0)
this
是一个关键字,可以在对象的范围内用来表示对象本身。
class A{
private:
int x;
void method(){
this->x = 5; //"this" is a pointer to the object itself
}
};
在此示例中,“this”为A* const
。
答案 1 :(得分:0)
看起来像多重继承。在这种情况下,每个继承的类接口都有单独的vtable。因此,第2和第3条指令计算指定的继承类接口的vtable的开始。调用是显而易见的,24只是一个幻数,是在该继承类中调用的函数的已知偏移量。