【发布时间】:2018-12-10 13:20:42
【问题描述】:
早上好,
在this post 中,我正在寻找一种在转储中找到CString 条目的方法,但我仍然是:-)
根据 Windbg 的x /2 结果中提到的第一个字段,似乎可以找到与对象相关的条目。对于具有虚拟方法的对象,这似乎是 __vptr 字段(对应于 *vftable' 条目),我认为这个问题对于 CString 类的特殊情况很容易。
在源代码 (C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\<version>\crt\src\vcruntime\undname.cxx) 中,我发现以下条目:
#if ( !NO_COMPILER_NAMES )
"`vftable'", <--- vftable: the one I'm working with
"`vbtable'",
"`vcall'",
"`typeof'",
"`local static guard'",
"`string'",
"`vbase destructor'",
"`vector deleting destructor'",
"`default constructor closure'",
"`scalar deleting destructor'",
"`vector constructor iterator'",
"`vector destructor iterator'",
"`vector vbase constructor iterator'",
"`virtual displacement map'",
"`eh vector constructor iterator'",
"`eh vector destructor iterator'",
"`eh vector vbase constructor iterator'",
"`copy constructor closure'",
"`udt returning'",
"`EH", //eh initialized struct
"`RTTI", //rtti initialized struct
"`local vftable'",
"`local vftable constructor closure'",
#endif // !NO_COMPILER_NAMES
这让我想知道我是否可以使用提到的条目之一作为对象的第一个字段的候选者。我已经发现windbg的x /2 *!ATL::CStringT*命令中有一个条目,以scalar deleting destructor'结尾,但我不知道我是否可以将其用作“第一字段”候选。
附:如果你想知道“但你为什么不试试呢?”,我的转储文件中存在的CStringT 对象包含一些奇怪的字符,这使得很难看出我是否做正确的事,看到奇怪但正确的字符,或者我正在查看虚假结果。
提前致谢
【问题讨论】: