早上好,在这篇文章中,我正在寻找一种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'
,但我不知道是否可以将其用作“第一个字段”候选者。
Ps 如果你想知道“但你为什么不试试呢?”,问题是CStringT
我的转储文件中存在的对象包含一些奇怪的字符,这使得很难看出我是否正在做正确的事情并看到奇怪但正确的字符,或者我正在查看虚假结果。
提前致谢