用C++反向工程虚函数代码

2 c++ virtual-functions reverse-engineering

我刚刚在VS2010上编译了以下内容(优化已关闭).

class Shape {
  public:
    int x,y;
    Shape() {
      x=10;
      y=20;
    }

    virtual void function1() {
      cout<<"function1";
    }

    virtual void function2() {
      cout<<"function2";
    }
};

int main() {
    Shape *s = new Shape();
    s->function1();
    s->function2();    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

反汇编不显示与虚函数对应的代码块或对它的任何调用,因此我假设这是因为使用vftable查找虚函数的方式.我正在使用IDA Pro,因此可能无法解决此类问题.如果我错了,请纠正我.

我在这方面也有一些疑问.

  1. 有没有什么办法可以像反汇编时的其他功能一样查看虚拟功能?我可以使用的任何脚本(IDAPython)/方法?
  2. 有什么办法可以列出可执行文件中的所有虚函数吗?
  3. 推荐读物?

Xeo*_*Xeo 10

仅当对象的动态类型与其静态类型(指向派生类的指针到Base)不同时,才涉及虚拟分派.既然你甚至没有继承,并且在调用站点有一个确切的类型,为什么要在vtable中进行查找呢?