作者:王玲 来源:CSDN博客 酷勤网收集 2007-08-26
摘要
某局接口的中间件总是异常关闭,多则一天五六次,少则一两天一次,次数频繁,且无任何规律可言。
|
标题:*
|
由于内存访问侵犯导致中间件异常关闭
|
|
作者:*
|
王玲
|
|
现象描述:*
|
|
|
某局接口的中间件总是异常关闭,多则一天五六次,少则一两天一次,次数频繁,且无任何规律可言。
|
|
|
告警信息:*
|
|
|
1、 查看drwtsn32.log,记录相关信息如下:
发生应用程序意外错误:
应用程序: (pid=572)
时间: 2007-3-7 @ 17:27:43.875
意外情况编号: c0000005 (访问侵犯)
……
2.通过windbg分析dump信息,显示如下:
ChildEBP RetAddr Args to Child
0157284c 0042260f 0157de14 01157fc9 00000062 MidwareServer!memcpy+0x33
015afe2c 00421fe9 01157f90 00000062 8324e884 MidwareServer!OnReply+0x1bf (CONV: cdecl) [d:\midwareserver\task\tasklist.cpp @ 768]
015afec0 00421f21 000ec960 01111cb0 000000b8 MidwareServer!CTaskList::TimerThread+0xb9 (CONV: thiscall) [d:\ midwareserver\task\tasklist.cpp @ 601]
015aff14 0044cf57 01111d20 0000101b 01111c30 MidwareServer!CTaskList::TimerThread+0x11 (CONV: cdecl) [d:\ midwareserver\task\tasklist.cpp @ 577]
015aff80 0043667d 000ec960 0000101b 0015ccb0 MidwareServer!_AfxThreadEntry+0xe3 (CONV: stdcall) [thrdcore.cpp @ 112]
015affb4 77e6987c 01111c30 0000101b 0015ccb0 MidwareServer!_beginthreadex+0xca
WARNING: Stack unwind information not available. Following frames may be wrong.
015affec 00000000 0043661e 01111c30 00000000 KERNEL32!SetThreadExecutionState+0x227
|
|
|
原因分析:*
|
|
|
分析dump信息得知:在拷贝消息包的输入参数时,误将整个包的长度当成具体的输入数据的长度,而包的长度必然大于输入数据的长度,且数据又处于整个包结构的最后,所以在拷贝时就会拷取紧随消息包之后的一部分内存,而这部分内存地址一旦是受系统保护的内存地址的话,则造成访问侵犯,中间件程序会被系统异常关闭。
|
|
|
处理过程:*
|
|
|
1、跟踪大量中间件日志,发现每次异常关闭并无任何特征及其规律可言。
2、查看事件查看器,发现每次应用程序异常关闭有dump日志记录,分析dump信息后确定问题所在。
3、修改程序,更新中间件后观察多天,运行正常无任何异常。
|
|
|
建议与总结:
|
|
|
典型的“差之毫厘,失之千里”,以此为诫。
|
|
原文链接: http://blog.csdn.net/jter_007/archive/2007/08/16/1746748.aspx

