Windows PDB文件包含相同地址的多个符号?

时间:2013-01-18 17:12:22

标签: windows pdb dbghelp

  

可能重复:
  Why two functions print the same address?

我正在使用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 !!

,有多个符号条目是没有意义的

任何人都可以告诉我:

  • 为什么会这样?

  • 这些重复的条目可以解析到唯一的位置吗?

感谢。

1 个答案:

答案 0 :(得分:4)

同一地址有多个符号,因为all the functions are the same。在你的情况下,它们都是

的功能
HRESULT MFBlahBlahBlah(...)
{
    return E_NOTIMPL;
}