开发者社区 问答 正文

在虚函数调用过程中,如果提到了thunk技术,那么thunk是在哪里被应用的,以及它具体做了什么操作

在虚函数调用过程中,如果提到了thunk技术,那么thunk是在哪里被应用的,以及它具体做了什么操作?

展开
收起
不吃核桃 2024-08-06 11:35:50 83 分享 版权
1 条回答
写回答
取消 提交回答
  • 在上述的汇编指令中,并没有直接显示thunk技术的应用,因为thunk主要是在某些特定情况下(如多重继承中的虚函数覆盖或虚继承)用来调整this指针的。然而,如果thunk被用于此场景,它通常会在虚函数表指针被读取并用于间接调用之前被插入。thunk的作用是在调用虚函数之前,根据当前对象的实际类型和虚函数表的位置,调整this指针的值,使其指向正确的对象起始地址(对于基类指针调用派生类虚函数的情况,可能需要将其调整为派生类对象的地址)。但在这个具体的例子中,由于rdi寄存器已经正确地传递了派生类对象的地址,因此可能不需要thunk技术的介入。如果thunk被使用,它会在callq *(%rcx)之前或作为其一部分被插入到调用序列中。
    image.png

    2024-08-06 14:58:33
    赞同 2 展开评论
问答地址: