0

重複の可能性:
2つの関数が同じアドレスを出力するのはなぜですか?

(DbgHelp APIを介して)それらを処理するアプリケーションのPDBシンボルファイルを使用しています。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

上記の例は、重複を含む多くのアドレスの1つです。通常、任意のアドレスに1つのシンボルエントリがあります。同じアドレスAFAIKに複数のシンボルエントリがあるのは意味がありません!!

誰かが私に次のことを教えてもらえますか?

  • なぜこれが起こっているのですか?

  • これらの重複したエントリを一意の場所に解決できますか?

ありがとう。

4

1 に答える 1

4

すべての機能が同じであるため、同じアドレスに複数のシンボルがあります。あなたの場合、それらはすべて機能します

HRESULT MFBlahBlahBlah(...)
{
    return E_NOTIMPL;
}
于 2013-01-18T17:27:01.633 に答える