2015-03-18 55 views
0

为了验证我有的理论,我希望看到(最好通过windbg)给定类vtable的偏移量转储。例如,给出一种类型,我可以用“DT类型”来获得补偿的转储类型在Windows上倾销VTable偏移量

dt CFoo 
    +0x000 __VFN_Table : Ptr32 
    +0x004 _dwSomething : Int4B 

我正在寻找类似

dvtable CFoo 
    +0x000 VirtualFunction1 
    +0x004 VirtualFunction2 

我也开放给外部在必要时分析符号的工具

+0

windows上的vtables实际上是很好描述的,它们遵循COM vtable规范。 – Mgetz 2015-03-18 23:18:38

回答

1

使用“-v”(详细)选项。

dt -v CFoo 
    +0x000 __VFN_table Ptr32 to 3 entries 
    <function> ~CFoo  void (void) 
    <function> VirtualFunction1  void (void) 
    <function> VirtualFunction2  void (void) 
+0

谢谢,但对于复杂的对象,这使得很难看到偏移量。有没有明显的命令我错过了?例如,对我来说,在打印函数+ 0x000 __VFN_table:Ptr32到7条目 + 0x004 _aMember:Ptr32到类Bar,23个元素,0xc字节 ...... *(void) – Ben 2015-03-18 23:27:46

+0

你解释一下你的“理论”,然后呢?也许还有另一种方式。 – pharring 2015-03-19 03:10:19

+0

我在执行pFoo-> VirtualFunction1()时遇到访问冲突。我正在分析一个转储,并且我看到pFoo非空,并且接近零的AV位于0x00000028。转储pFoo显示其所有内存已归零(包括vtable)。我只想通过验证VirtualFunction1的偏移量是28来确认我知道发生了什么,这将确认接近零的AV来自vtable +虚拟功能地址。 – Ben 2015-03-19 17:15:51