-
-
[讨论]虚函数表的作用?
-
发表于:
2007-10-24 09:09
6573
-
在逆向分析C++类的虚函数时,会发现每一个有虚函数的类均有一个虚函数表,在进行虚函数调用时,均会进入类似如下的调用:
00401084 mov eax,dword ptr [ebp-20h] ;取出虚函数表地址
00401087 lea ecx,[ebp-20h]
0040108A call dword ptr [eax+4] ;调用虚函数表中的第二个虚函数
程序在编译时,所有虚函数的地址都确定了,都填入到了虚函数表中,然后通过寄存器间接寻址的方式来对虚函数进行调用,如:call dword ptr [eax+4]
有点不明白,既然虚函数的地址都已确定,就可以直接通过函数地址硬编码的方式来进行调用的呀,如:call 00401010
这样就可以不需要虚函数表了,而且更简单,同样也可以实现虚函数的多态性。
也许是我对虚函数理解还够透彻,请高手指点!谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)