一个dump文件分析结果如下:
0:067> kbn # ChildEBP RetAddr Args to Child 00 2081fd8c 0d751dd6 3fb0bbd1 658bacc0 32323131 SPDecV33!LeadUpVec+0xe [f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\memcpy.asm @ 233] 01 2081fda8 0d7525de 2081ff00 2081ff54 2081feec SPDecV33!CLS_H264Decoder::CopyYUV+0x26 [f:\windows sdk\windows\decoder\spdecv33\trunk\source\spdecv33\cls_h264decoder.cpp @ 475] 02 2081fddc 0d752f88 30680020 0000076d 0ddc2998 SPDecV33!CLS_H264Decoder::DecodeOneFrame+0x12e [f:\windows sdk\windows\decoder\spdecv33\trunk\source\spdecv33\cls_h264decoder.cpp @ 241] 03 2081fdec 0cc3e06a 00000001 30680020 0000076d SPDecV33!Decode+0x28 [f:\windows sdk\windows\decoder\spdecv33\trunk\source\spdecv33\spdecv33.cpp @ 153] WARNING: Stack unwind information not available. Following frames may be wrong.
可以看到是memcpy出的错,进入1号栈帧:
0:067> .frame 1 01 2081fda8 0d7525de SPDecV33!CLS_H264Decoder::CopyYUV+0x26 [f:\windows sdk\windows\decoder\spdecv33\trunk\source\spdecv33\cls_h264decoder.cpp @ 475] 0:067> dv this = 0x3232312e 0:067> dt this Local var @ ecx Type CLS_H264Decoder* +0x000 __VFN_table : 0x04030002 +0x008 m_DecHandle : 0x1c220000 Void +0x00c m_attr : hiH264_DEC_ATTR_S +0x030 m_outframe : hiH264_DEC_FRAME_S +0x088 m_hDeinterlace : 0x213422ff Void +0x08c m_bInitDeinterlace : 0 +0x090 m_iInterlaced : 0n100883200 +0x094 m_diFrame : hiDEINTERLACE_FRAME_S +0x0a0 m_bAllocYUVMem : ffffffffffffffff +0x0a4 m_iVideoBufSize : 0n336003840 +0x0a8 m_pVideoBuf : 0x0359ffff "" +0x0ac m_iVideoLen : 0n-1904344824 +0x0b0 m_pInStream : (null) +0x0b4 m_pYUV : (null) +0x0b8 m_iVBufPos : 0n196608 +0x0bc m_iLoadRet : 0n838074368 +0x0c0 m_frmHeader : S_FrameHeader +0x0e0 m_u8AEncodeType : 0 '' +0x0e4 m_decstate : hiVOICE_G726_STATE +0x164 m_pDecAudioBuf : 0x00030000 "--- memory read error at address 0x00030000 ---" +0x168 m_iDecAudioLen : 0n393216 +0x16c m_iMaxDecAudioLen : 0n-2077622272 +0x170 m_ExtraInfo : OSDINFO +0x278 m_blToResetUserData : 1 +0x279 m_blSwitchACodec : 0 +0x27c m_u32AFrameHead : 0x14c80000 +0x280 m_bNeedReCreateDecoder : 0 +0x284 m_iImageWidth : 0n262144 +0x288 m_iImageHeight : 0n869007360 +0x28c m_AACDecoder : CLS_AACDecoder
Release版本动态库符号(所有编译连接选项为vs2008默认)dv看到的内容准么?我感觉不准,因为memcpy使用的是m_pYUV,dv看到的是NULL
如何继续往下跟踪呢?是源数据访问越界,还是目的地址指向内存太小?
|