求教:memcpy导致程序崩溃?有dump分析文件.
运行环境:Windows Server 2003
程序类型:VC++2008 SP1,MFC DLL,非托管.
使用Adplus捕获了进程非正常退出,Crash产生了dump文件.
windbg加载dump文件如下:
Microsoft (R) Windows Debugger Version 6.11.0001.404 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [D:\Controlsys_vc9\PID-16736__NETCORE.EXE__2nd_chance_AccessViolation__full_3af4_2011-12-02_11-47-17-671_4160.dmp]
User Mini Dump File with Full Memory: Only application data is available
Comment: '2nd_chance_AccessViolation_exception_in_NETCORE.EXE_running_on_IBM'
Symbol search path is: D:\Controlsys_vc9;D:\symbolMyApp;d:\symbolcache;srv*d:\symbolcache*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows Server 2003 Version 3790 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: Server, suite: Enterprise TerminalServer SingleUserTS
Machine Name:
Debug session time: Fri Dec 2 11:47:17.000 2011 (GMT+8)
System Uptime: 31 days 9:22:39.730
Process Uptime: 0 days 0:49:47.000
................................................................
............
Missing image name, possible paged-out or corrupt data.
Loading unloaded module list
.Missing image name, possible paged-out or corrupt data.
....
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(4160.2cd0): Access violation - code c0000005 (first/second chance not available)
eax=667d0418 ebx=66bef1b8 ecx=000000df edx=00000000 esi=667d009c edi=3a165020
eip=7855ab1a esp=66beeec8 ebp=66beeed0 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010206
msvcr90!memcpy+0x5a:
7855ab1a f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
=================
!analyze -v
执行分析命令后显示如下:
FAULTING_IP:
msvcr90!memcpy+5a [f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\memcpy.asm @ 188]
7855ab1a f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 7855ab1a (msvcr90!memcpy+0x0000005a)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000001
Parameter[1]: 3a165020
Attempt to write to address 3a165020
DEFAULT_BUCKET_ID: INVALID_POINTER_WRITE
PROCESS_NAME: NetCore.exe
ERROR_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - "0x%08lx"
EXCEPTION_PARAMETER1: 00000001
EXCEPTION_PARAMETER2: 3a165020
WRITE_ADDRESS: 3a165020
FOLLOWUP_IP:
msvcr90!memcpy+5a [f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\memcpy.asm @ 188]
7855ab1a f3a5 rep movs dword ptr es:[edi],dword ptr [esi]
NTGLOBALFLAG: 0
APPLICATION_VERIFIER_FLAGS: 0
FAULTING_THREAD: 00002cd0
PRIMARY_PROBLEM_CLASS: INVALID_POINTER_WRITE
BUGCHECK_STR: APPLICATION_FAULT_INVALID_POINTER_WRITE
LAST_CONTROL_TRANSFER: from 004d96e1 to 7855ab1a
STACK_TEXT:
66beeed0 004d96e1 3a165020 667d009c 0000037c msvcr90!memcpy+0x5a [f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\memcpy.asm @ 188]
66beefcc 004da268 fbe0fea8 0afce1d0 66bef1b8 NetCore!MACROLAND::CVideoBuffer2::WriteDataBlockInBuffer+0x181 [e:\work\netcore_vc9\src\videobuffer.cpp @ 403]
66bef150 0046a255 66bef1b8 fbe0e010 0afce318 NetCore!MACROLAND::CVideoBuffer2::BufferDataBlock+0x248 [e:\work\netcore_vc9\src\videobuffer.cpp @ 295]
66bef188 0046a86f 00000000 66bef1b8 00000001 NetCore!MACROLAND::CStreamListManager::BufferStream+0xa5 [e:\work\netcore_vc9\src\streaminfo.cpp @ 1458]
66bef1e4 06a61823 66bef20c c2c2fc38 667d008c NetCore!MACROLAND::CStreamListManager::DisposeStreamData+0xaf [e:\work\netcore_vc9\src\streaminfo.cpp @ 1304]
66bef23c 06a7c35f 00000000 0baa5a60 0000037c VM2000Client!MACROLAND::StreamDirectDataCallBack+0x183 [e:\projects\workingcode\devicedriver\vmclientdriver\devicecode.cpp @ 2685]
66bef384 06a7cb24 667d008c 66bef80c 66bef814 VM2000Client!CVideoChannel::ProcessRecvData+0x15f [e:\projects\workingcode\devicedriver\vmclientdriver\videochannel.cpp @ 413]
66befeec 7867a6bb 667d0020 c091aca4 00000000 VM2000Client!CVideoChannel::VideoProc+0x2f4 [e:\projects\workingcode\devicedriver\vmclientdriver\videochannel.cpp @ 854]
WARNING: Stack unwind information not available. Following frames may be wrong.
66beff74 78543433 1bc6f108 fa9161dc 00000000 mfc90+0x9a6bb
66beffac 785434c7 00000000 66beffec 7c82482f msvcr90!_callthreadstartex+0x1b [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 348]
66beffb8 7c82482f 0d77c328 00000000 00000000 msvcr90!_threadstartex+0x69 [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 326]
66beffec 00000000 7854345e 0d77c328 00000000 kernel32!BaseThreadStart+0x34
FAULTING_SOURCE_CODE:
No source found for 'f:\dd\vctools\crt_bld\SELF_X86\crt\src\INTEL\memcpy.asm'
SYMBOL_STACK_INDEX: 0
SYMBOL_NAME: msvcr90!memcpy+5a
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: msvcr90
IMAGE_NAME: msvcr90.dll
DEBUG_FLR_IMAGE_TIMESTAMP: 488ef6c5
STACK_COMMAND: ~624s; .ecxr ; kb
FAILURE_BUCKET_ID: INVALID_POINTER_WRITE_c0000005_msvcr90.dll!memcpy
BUCKET_ID: APPLICATION_FAULT_INVALID_POINTER_WRITE_msvcr90!memcpy+5a
WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/NetCore_exe/1_4_0_3/4ed70b9b/msvcr90_dll/9_0_30729_1/488ef6c5/c0000005/0003ab1a.htm?Retriage=1
Followup: MachineOwner
---------
程序经常在启动后运行1个小时左右崩溃退出,崩溃时间不定.
得到的dump完全转储文件有900MB多,但是windbg分析后,进程内的大部分对象无法获取其成员变量崩溃当时的值,显示为“<Memory access error>”。
本人能力有限,一直找不出崩溃的真正原因所在,希望此来请教高人指点一二。
万分谢谢!