Windows PDB文件包含同一地址的多个符号?[重复]

ldioqlga  于 2023-03-24  发布在  Windows
关注(0)|答案(1)|浏览(125)

此问题在此处已有答案

10年前关闭了。

可能重复:

Why two functions print the same address?
我正在为一个处理PDB符号文件的应用程序工作(通过DbgHelp API)。我遇到了一个奇怪的问题,PDB文件将包含同一地址的多个不同的公共符号条目!
例如,在Windows 7(x64)上使用最新的Microsoft PDB文件kernel32.dll(wow 64),我们可以转储以下信息,并看到相同地址0x 10 b1 a6 e的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!!有多个符号条目是没有意义的。
有没有人能告诉我:

  • 为什么会发生这种情况?
  • 这些重复的条目能否被解析到唯一的位置?

谢谢。

1mrurvl1

1mrurvl11#

因为all the functions are the same,所以同一地址有多个符号。在您的示例中,它们都是

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

相关问题