如何在运行时从地址确定C ++对象的类型?

时间:2019-09-07 17:29:50

标签: visual-studio assembly memory c++03 watch-window

我想从内存地址确定对象的类型,以便可以在VS Watch窗口中应用正确的转换并查看对象。

我正在尝试在反汇编视图中进行调试,因为我自己的代码以DLL的形式加载到了我没有源代码或pdb的现有exe文件中。

typeid和dynamic_cast的存在使我希望可以通过某种方式(可能以有限的方式)实现这一目标,而无需任何其他编码。

但是,如果解决方案包括修改我的代码,我感到很高兴,但是我可以访问所有的类定义,尽管我不一定必须更改其中一些的内存布局。

我还有一个对象分配的替代,因此我有机会在这里为自己的目的分配额外的内存,例如我可以在其中放置某种名称标签的对象前4个字节。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。 我使用一个用于跟踪分配的系统解决了这个问题: http://www.almostinfinite.com/memtrack.html 这是对new的替代,它将标记所有分配的类型为ID的分配(以及其他信息)。