0

我正在阅读某人的代码,他正在调用这样的函数。该块中的“this”是指向虚拟方法表的指针,并且他正在使用偏移量来调用所述表中的函数。如果您想知道,这是一个黑客行为。

    __asm
{
    MOV EDI, this
    LEA ECX, [EDI + 0x4]
    MOV EDX, DWORD PTR DS:[ECX]
    CALL [EDX + 0x24]
}   

他有一些更简单的代码,只是调用“this”+偏移量,但我对这个代码中发生的事情感到困惑。如果有帮助的话,我可以从 Ida 发布 vtable 转储。

4

2 回答 2

0

this在 C++ 中是一个关键字,可以在对象的范围内使用来表示对象本身。

class A{
    private:
        int x;

    void method(){
        this->x = 5;    //"this" is a pointer to the object itself
    }
};

在本例中,“this”是一个A* const.

于 2013-04-09T03:42:44.877 回答
0

看起来像多重继承。在这种情况下,每个继承的类接口都有单独的 vtable。因此,第二条和第三条指令为指定的继承类接口计算 vtable 的开始。调用很明显,24 只是一个幻数,是在该继承类中要调用的函数的已知偏移量。

于 2013-04-09T09:24:19.850 回答