利用 Visual Studio 调试器中看到的虚拟指针表地址
在 Visual Studio for C++ 中,我们多次获得调试器中可见的类的 vfptr 或 vptr 地址。在 Visual Studio 中,我们还可以通过内置的内存视图来分析线程的内存。 但那里可见的信息是二进制的。
有什么方法可以通过虚拟指针地址获取有关类类型的更多信息或任何其他有用的信息以进行调试?(考虑到我们可以在 Visual Studio 中通过该地址分析内存本身)
Many a times in Visual Studio for C++ we get the vfptr or the vptr address of a class visible in the debugger. In Visual Studio we can also analyze memory of the thread through the in built memory views.
But the information visible there is in binary.
Is there some way I can get more information about the class type or any other useful information through the virtual pointer address for debugging purposes?(Considering the fact that we can analyze the memory itself through this address in Visual Studio)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您在 QuickWatch 或 Variables 窗口中展开类,您可以像这样以 ascii 格式查看类详细信息。
在这里您可以看到该类的类型为
Foo
并且有一个虚拟具有一个名为bar
的函数的表If you expand the class in QuickWatch or Variables window , you can see class details in ascii like so.
Here you can see that the class is of type
Foo
and has a virtual table with one function calledbar
我将它用于我的自定义 RTTI。提取 vf 指针很容易,并且它对于每个类都是唯一的(当然你的类中至少需要 1 个虚函数)。在 Visual C++ 和最近的 gcc 和 llvm 中,它是 32 位架构上的类的第一个长字。这样玩是不安全的,如果你没有真正的需要,你可能不应该这样做。
I'm using it for my custom RTTI. It's easy to extract the vf pointer and it's unique for each class (of course you need at least 1 virtual function in your class). In visual c++ and recent gcc and llvm it's first longword of the class on 32-bit architectures. It's not safe to play like this and if you don't have a genuine need you should probably not do that.