操作系统如何知道 EIP 不再是有效/合法的指令并且该应用程序已崩溃?它如何知道何时生成故障转储数据?
我有以下类结构:
class CLASS_EXPORT A
{
public:
virtual bool foo1();
virtual bool foo2();
};
class CLASS_EXPORT B: public A{
public:
B();
virtual bool foo1();
};
int main()
{
B b;
}
Run Code Online (Sandbox Code Playgroud)
这些类位于一个 dll 内。当我查看对象“b”的虚拟指针时,它没有显示 foo2() 函数的条目。它显示了 foo1() 的条目和另一个 dll 中不同类的完全不同的条目。
我正在使用 Visual studio 2015 并使用快速监视来查看“this”指针。此外,在调试版本上进行调试时,控件会转到错误的函数。当为此调试汇编代码时,基类构造函数在基类的 this 指针内分配了错误的 vtable 指针。
00007FFA6323E6CB lea rcx,[A::`vftable' (07FFA63422CB8h)]
如果我检查 07FFA63422CB8h 处的值,它会显示不正确的函数指针
您能帮忙找出可能是什么原因造成的吗?
谢谢