C++ 在Windows上转储VTable偏移
为了验证我的理论,我希望最好通过windbg看到给定类vtable的偏移转储。例如,给定一个类型,我可以使用dt type获得该类型中偏移量的转储C++ 在Windows上转储VTable偏移,c++,debugging,C++,Debugging,为了验证我的理论,我希望最好通过windbg看到给定类vtable的偏移转储。例如,给定一个类型,我可以使用dt type获得该类型中偏移量的转储 dt CFoo +0x000 __VFN_Table : Ptr32 +0x004 _dwSomething : Int4B 我在找像这样的东西 dvtable CFoo +0x000 VirtualFunction1 +0x004 VirtualFunction2 我也愿意使用外部工具来分析符号(如果需要)使用-v ve
dt CFoo
+0x000 __VFN_Table : Ptr32
+0x004 _dwSomething : Int4B
我在找像这样的东西
dvtable CFoo
+0x000 VirtualFunction1
+0x004 VirtualFunction2
我也愿意使用外部工具来分析符号(如果需要)使用-v verbose选项
dt -v CFoo
+0x000 __VFN_table Ptr32 to 3 entries
<function> ~CFoo void ( void )
<function> VirtualFunction1 void ( void )
<function> VirtualFunction2 void ( void )
windows上的vtable实际上描述得很好,它们遵循COM vtable规范。谢谢,但对于复杂的对象,这使得很难看到偏移。有没有明显的订单我不知道?例如,对我来说,在打印函数+0x000\u VFN\u表之前打印一些成员:Ptr32到7个条目+0x004\u aMember:Ptr32到类栏,23个元素,0xc字节….*那么,你能解释一下你的“理论”吗?也许还有另一种方法。我在执行pFoo->VirtualFunction 1时遇到访问冲突。我正在分析一个转储文件,我看到pFoo是非空的,接近空的AV是0x00000028。转储pFoo表明其所有内存都已归零,包括vtable。我只是想通过验证virtualfunction 1的偏移量是28来验证我是否知道发生了什么,这将确认接近空的AV来自vtable+virtualfunction地址。