Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Windows上转储VTable偏移_C++_Debugging - Fatal编程技术网

C++ 在Windows上转储VTable偏移

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

为了验证我的理论,我希望最好通过windbg看到给定类vtable的偏移转储。例如,给定一个类型,我可以使用dt type获得该类型中偏移量的转储

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地址。