C++ 这是怎么回事?

C++ 这是怎么回事?,c++,assembly,C++,Assembly,我正在阅读某人的代码,他正在调用这样的函数。该块中的“this”是指向虚拟方法表的指针,他使用偏移量调用所述表中的函数。这是一个黑客的事情,以防你想知道 __asm { MOV EDI, this LEA ECX, [EDI + 0x4] MOV EDX, DWORD PTR DS:[ECX] CALL [EDX + 0x24] } 他有一些简单的代码,只把“this”+称为偏移量,但我不知道这是怎么回事。我可以把艾达的VDIP转储发布出来,如果这

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

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

他有一些简单的代码,只把“this”+称为偏移量,但我不知道这是怎么回事。我可以把艾达的VDIP转储发布出来,如果这有帮助的话。

< P> <代码> C++中的是一个关键字,它可以用于对象的范围来表示对象本身。
class A{
    private:
        int x;

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

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

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

哦,是的,如果有帮助的话,函数会返回指向结构的指针。你能解释一下“发生了什么”是什么意思吗?您是否要求解释单独的装配说明?或者“单个组装说明”是您想要的答案吗?我只是想知道作者是如何从中得到0xD4的偏移量的。另外,“DWORD PTR DS:[ECX]”部分在做什么?这正是我想弄明白的。谢谢你的回答,但我知道“这”是什么。我在问作者在这段代码中到底做了什么。他不知怎的得到了一个远离基址0xD4的函数,我不知道怎么做。