这是怎么回事?

时间:2013-04-09 03:34:12

标签: c++ assembly

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

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

他有更简单的代码,只是调用“this”+偏移量,但我对这个代码的内容感到困惑。我可以从Ida发布vtable转储,如果这会有所帮助。

2 个答案:

答案 0 :(得分:0)

C ++中的

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只是一个幻数,是在该继承类中调用的函数的已知偏移量。