我正在使用PDB符号文件处理它们的应用程序(通过DbgHelp API)。我遇到一个奇怪的问题,PDB文件将包含同一地址的多个不同的公共符号条目!
例如,在Windows 7(x64)上使用kernel32.dll(wow64)的最新Microsoft PDB文件,我们可以转储以下信息,并查看同一地址0x10b1a6e的31个不同条目:
C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x86>dbh.exe c:\symbols\wkernel32.pdb\D08F1E131D1F4D97B4AB2F64E00CFC8B2\wkernel32.pdb m 10b1a6e
index address name
7a 10b1a6e : MFInitAttributesFromBlob
179 10b1a6e : MFCreateSourceReaderFromURL
2fc 10b1a6e : MFCreateASFMediaSinkActivate
5b6 10b1a6e : MFCreateWMVEncoderActivate
61d 10b1a6e : MFAddPeriodicCallback
64c 10b1a6e : MFPutWorkItem
825 10b1a6e : MFCreateAlignedMemoryBuffer
c12 10b1a6e : MFGetAttributesAsBlob
d26 10b1a6e : MFCreateMFVideoFormatFromMFMediaType
f1a 10b1a6e : MFFrameRateToAverageTimePerFrame
1129 10b1a6e : MFCreateProxyLocator
1277 10b1a6e : MFSerializeAttributesToStream
12b3 10b1a6e : MFEnumDeviceSources
146d 10b1a6e : MFCreateWMAEncoderActivate
164c 10b1a6e : MFBeginUnregisterWorkQueueWithMMCSS
1bfc 10b1a6e : MFCreateSourceReaderFromMediaSource
1d25 10b1a6e : MFInitMediaTypeFromWaveFormatEx
1d72 10b1a6e : MFGetStrideForBitmapInfoHeader
1efb 10b1a6e : CopyPropertyStore
1f8d 10b1a6e : MFDeserializePresentationDescriptor
1fb5 10b1a6e : MFCreateSampleGrabberSinkActivate
1fe4 10b1a6e : MFCreateASFStreamingMediaSinkActivate
23a3 10b1a6e : MFDeserializeAttributesFromStream
24c0 10b1a6e : MFConvertFromFP16Array
26f7 10b1a6e : MFSerializePresentationDescriptor
2877 10b1a6e : MFCreatePresentationDescriptor
2ab7 10b1a6e : MFCreateSourceReaderFromByteStream
2b4a 10b1a6e : MFGetWorkQueueMMCSSClass
2e08 10b1a6e : MFInitMediaTypeFromMFVideoFormat
2ef0 10b1a6e : MFCreateSinkWriterFromMediaSink
2eff 10b1a6e : MFConvertToFP16Array
以上示例是包含重复项的许多地址之一。通常,任何地址都有一个符号条目。对于相同的地址AFAIK !!
,有多个符号条目是没有意义的任何人都可以告诉我:
为什么会这样?
这些重复的条目可以解析到唯一的位置吗?
感谢。
答案 0 :(得分:4)
同一地址有多个符号,因为all the functions are the same。在你的情况下,它们都是
的功能HRESULT MFBlahBlahBlah(...)
{
return E_NOTIMPL;
}