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



可能重复:
为什么两个函数打印相同的地址?

我正在为一个处理它们的应用程序(通过DbgHelp API(处理PDB符号文件。我遇到了一个奇怪的问题,一个PDB文件将包含同一地址的多个不同的公共符号条目!

例如,在Windows 7(x64(上使用kernel32.dll(wow64(的最新Microsoft PDB文件,我们可以转储以下信息,并看到相同地址0x10b1a6e的31个不同条目:

C:Program Files (x86)Windows Kits8.0Debuggersx86>dbh.exe c:symbolswkernel32.pdbD08F1E131D1F4D97B4AB2F64E00CFC8B2wkernel32.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设置多个符号条目根本没有意义!!

有人能告诉我:

  • 为什么会发生这种情况?

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

谢谢。

同一地址有多个符号,因为所有函数都相同。在你的情况下,它们都是去的功能

HRESULT MFBlahBlahBlah(...)
{
    return E_NOTIMPL;
}

最新更新