VS2013开发的C++dll,在winxp上面重复调用时闪退

十八道胡同 2020-03-04 04:32:03
用Vs2013开发的 C++11的dll,在winxp上面重复初始化,第3次或者第4次的时候闪退。
该程序在win7和win10,不存在闪退情况。

下面是winxp 记录的崩溃日志


发生应用程序意外错误:
应用程序: C:\Documents and Settings\Administrator\桌面\test\GetThePathGantry\PriceTest.exe (pid=2732)
时间: 2020-2-28 @ 13:44:49.375
意外情况编号: c0000005 (访问侵犯)

*----> 系统信息 <----*
计算机名: LICHANGL-6EAED7
用户名: Administrator
终端会话 Id: 0
处理器数量: 1
处理器类型: x86 Family 6 Model 142 Stepping 10
Windows 版本: 5.1
当前内部版本号: 2600
Service Pack: 3
当前类型: Uniprocessor Free
注册的单位:
注册的所有者: lichangliang

*----> 任务列表 <----*
0 System Process
4 System
540 smss.exe
604 csrss.exe
628 winlogon.exe
672 services.exe
684 lsass.exe
836 vmacthlp.exe
848 svchost.exe
916 svchost.exe
952 svchost.exe
1000 svchost.exe
1088 svchost.exe
1280 spoolsv.exe
1488 VGAuthService.exe
1636 Explorer.EXE
1804 vmtoolsd.exe
1868 ctfmon.exe
1904 vmtoolsd.exe
1472 alg.exe
1116 wscntfy.exe
1076 wmiprvse.exe
2732 Error 0x8007007A
3092 drwtsn32.exe

*----> 模块清单 <----*
(0000000000400000 - 0000000000417000: C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\PriceTest.exe
(0000000004f50000 - 0000000004faa000: C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\GantryFree.dll
(0000000010000000 - 00000000100a0000: C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\CSNT.Core.CalculatePrice.dll
(000000005adc0000 - 000000005adf7000: C:\WINDOWS\system32\uxtheme.dll
(0000000062c20000 - 0000000062c29000: C:\WINDOWS\system32\LPK.DLL
(0000000073390000 - 00000000734e3000: C:\WINDOWS\system32\MSVBVM60.DLL
(0000000073640000 - 000000007366e000: C:\WINDOWS\system32\msctfime.ime
(0000000073fa0000 - 000000007400b000: C:\WINDOWS\system32\USP10.dll
(0000000074680000 - 00000000746cc000: C:\WINDOWS\system32\MSCTF.dll
(0000000075e00000 - 0000000075eae000: C:\WINDOWS\system32\SXS.DLL
(0000000076300000 - 000000007631d000: C:\WINDOWS\system32\IMM32.DLL
(0000000076990000 - 0000000076acd000: C:\WINDOWS\system32\ole32.dll
(0000000076d70000 - 0000000076d92000: C:\WINDOWS\system32\Apphelp.dll
(00000000770f0000 - 000000007717b000: C:\WINDOWS\system32\OLEAUT32.dll
(0000000077bd0000 - 0000000077bd8000: C:\WINDOWS\system32\VERSION.dll
(0000000077be0000 - 0000000077c38000: C:\WINDOWS\system32\msvcrt.dll
(0000000077d10000 - 0000000077da0000: C:\WINDOWS\system32\USER32.dll
(0000000077da0000 - 0000000077e49000: C:\WINDOWS\system32\ADVAPI32.dll
(0000000077e50000 - 0000000077ee2000: C:\WINDOWS\system32\RPCRT4.dll
(0000000077ef0000 - 0000000077f39000: C:\WINDOWS\system32\GDI32.dll
(0000000077f40000 - 0000000077fb6000: C:\WINDOWS\system32\SHLWAPI.dll
(0000000077fc0000 - 0000000077fd1000: C:\WINDOWS\system32\Secur32.dll
(000000007c800000 - 000000007c91e000: C:\WINDOWS\system32\kernel32.dll
(000000007c920000 - 000000007c9b3000: C:\WINDOWS\system32\ntdll.dll

*----> 线程 ID 0xab0 的状态转储 <----*

eax=04a721e8 ebx=0019d628 ecx=0000000f edx=0000000e esi=0019d658 edi=0012ecec
eip=1001a1c3 esp=0012eb94 ebp=0012ebb0 iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000206

*** WARNING: Unable to verify checksum for C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\CSNT.Core.CalculatePrice.dll
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\CSNT.Core.CalculatePrice.dll -
函数: CSNT.Core.CalculatePrice
1001a1ac 183b sbb [ebx],bh
1001a1ae 46 inc esi
1001a1af 087508 or [ebp+0x8],dh
1001a1b2 51 push ecx
1001a1b3 8bce mov ecx,esi
1001a1b5 e8161c0000 call CSNT.Core.CalculatePrice+0x1bdd0 (1001bdd0)
1001a1ba 8b4e04 mov ecx,[esi+0x4]
1001a1bd 85c9 test ecx,ecx
1001a1bf 7404 jz CSNT.Core.CalculatePrice+0x1a1c5 (1001a1c5)
1001a1c1 8b07 mov eax,[edi]
错误 ->1001a1c3 8901 mov [ecx],eax ds:0023:0000000f=????????
1001a1c5 83460404 add dword ptr [esi+0x4],0x4
1001a1c9 8b4df4 mov ecx,[ebp-0xc]
1001a1cc 64890d00000000 mov fs:[00000000],ecx
1001a1d3 59 pop ecx
1001a1d4 5f pop edi
1001a1d5 5e pop esi
1001a1d6 8be5 mov esp,ebp
1001a1d8 5d pop ebp
1001a1d9 c20400 ret 0x4
1001a1dc cc int 3

*----> 堆栈反向跟踪 <---*
WARNING: Stack unwind information not available. Following frames may be wrong.
*** ERROR: Module load completed but symbols could not be loaded for C:\Documents and Settings\Administrator\×à??\test\GetThePathGantry\PriceTest.exe
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\MSVBVM60.DLL -
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\USER32.dll -
ChildEBP RetAddr Args to Child
0012ebb0 10015403 0012ecec 9c27e2ea 00000000 CSNT.Core.CalculatePrice+0x1a1c3
0012ee74 10013274 9c27fcc2 010e3814 0012f340 CSNT.Core.CalculatePrice+0x15403
0012f05c 10002366 0012f340 040c3ec8 0012f358 CSNT.Core.CalculatePrice+0x13274
0012f094 1000cf72 0012f340 040c3ec8 0012f358 CSNT.Core.CalculatePrice+0x2366
0012f42c 1000d73a 0166a73c 05a6ea1c 00000000 CSNT.Core.CalculatePrice+0xcf72
0012f480 10010799 0166a73c 9c27f80e 0017c320 CSNT.Core.CalculatePrice+0xd73a
0012f4cc 0040a43b 0166a73c 05a6ea1c 0012f61c CSNT.Core.CalculatePrice!Init+0x179
0012f610 733e1ce3 0017c320 0012f62c 00407124 PriceTest+0xa43b
0012f61c 00407124 0017c428 00406bd8 0012f678 MSVBVM60!IID_IVbaHost+0x23703
0012f62c 733e1fe4 00407124 0012f6e8 00000002 PriceTest+0x7124
0012f678 733e244b 0012f728 0012f6e8 00000002 MSVBVM60!IID_IVbaHost+0x23a04
0012f74c 733e2617 00d18274 00d0fd54 00d05118 MSVBVM60!IID_IVbaHost+0x23e6b
0012f770 734444a0 00d18274 00000000 00000000 MSVBVM60!IID_IVbaHost+0x24037
0012f7a0 733ece03 00d18274 00050234 00002111 MSVBVM60!EbLibraryUnload+0xdcd9
0012f7c8 733ef800 00d18274 00050234 00002111 MSVBVM60!IID_IVbaHost+0x2e823
0012f824 733ee1e6 00050234 00002111 00000038 MSVBVM60!IID_IVbaHost+0x31220
0012f848 733edc27 00d17ecc 0005022e 00000111 MSVBVM60!IID_IVbaHost+0x2fc06
0012f8b4 7343e6d7 00d04d08 0005022e 00000111 MSVBVM60!IID_IVbaHost+0x2f647
0012f92c 733ece03 00d17ecc 0005022e 00000111 MSVBVM60!EbLibraryUnload+0x7f10
0012f954 733ef800 00d17ecc 0005022e 00000111 MSVBVM60!IID_IVbaHost+0x2e823
0012f9b0 77d18734 0005022e 00000111 00000038 MSVBVM60!IID_IVbaHost+0x31220
0012f9dc 77d18816 733ef5d1 0005022e 00000111 USER32!GetDC+0x6d
0012fa44 77d2927b 00000000 733ef5d1 0005022e USER32!GetDC+0x14f
0012fa80 77d292e3 00629ba8 00621a78 00000038 USER32!GetParent+0x16c
0012faa0 77d4ff7d 0005022e 00000111 00000038 USER32!SendMessageW+0x49
0012fab8 77d465d2 00629e68 00000000 00629e68 USER32!CreateMDIWindowA+0x1bd
0012fad4 77d25e94 00185100 00000001 00000000 USER32!DeregisterShellHookWindow+0x6312
0012fb58 77d3b082 00629e68 00000202 00000000 USER32!IsDlgButtonChecked+0x109a
0012fb78 77d18734 00050234 00000202 00000000 USER32!SoftModalMessageBox+0xda3
0012fba4 77d18816 77d3b036 00050234 00000202 USER32!GetDC+0x6d
0012fc0c 77d2a013 00000000 77d3b036 00050234 USER32!GetDC+0x14f
0012fc3c 77d2a998 77d3b036 00050234 00000202 USER32!IsWindowUnicode+0xa1
0012fc5c 733ed03c 77d3b036 00050234 00000202 USER32!CallWindowProcA+0x1b
0012fcc8 73444776 00d05118 00050234 00000202 MSVBVM60!IID_IVbaHost+0x2ea5c
0012fcf0 733ece03 00d18274 00050234 00000202 MSVBVM60!EbLibraryUnload+0xdfaf
0012fd18 733ef800 00d18274 00050234 00000202 MSVBVM60!IID_IVbaHost+0x2e823
0012fd74 77d18734 00050234 00000202 00000000 MSVBVM60!IID_IVbaHost+0x31220
0012fda0 77d18816 733ef5d1 00050234 00000202 USER32!GetDC+0x6d
0012fe08 77d189cd 00000000 733ef5d1 00050234 USER32!GetDC+0x14f
0012fe68 77d196c7 0012fe90 00000001 0012feb8 USER32!GetWindowLongW+0x127
0012fe78 7339a6b0 0012fe90 ffffffff 00d0373c USER32!DispatchMessageA+0xf
0012feb8 7339a627 ffffffff 00d03764 00d00000 MSVBVM60!_vbaStrToAnsi+0x2f1
0012fefc 7339a505 00d03834 ffffffff 00000aac MSVBVM60!_vbaStrToAnsi+0x268
733aa3b8 73396c73 7339756a 73457ee7 73457f12 MSVBVM60!_vbaStrToAnsi+0x146
73456754 0c2474ff ff0c408b 8b0c2474 11ff5008 MSVBVM60!BASIC_CLASS_QueryInterface+0x17
0424448b 00000000 00000000 00000000 00000000 0xc2474ff

*----> 原始堆栈转储 <----*
000000000012eb94 2e e7 27 9c 27 00 00 00 - e8 21 a7 04 58 d6 19 00 ..'.'....!..X...
000000000012eba4 68 ee 12 00 91 bc 06 10 - ff ff ff ff 74 ee 12 00 h...........t...
000000000012ebb4 03 54 01 10 ec ec 12 00 - ea e2 27 9c 00 00 00 00 .T........'.....
000000000012ebc4 74 74 19 00 30 de 18 00 - 84 d4 07 10 00 00 00 00 tt..0...........
000000000012ebd4 00 00 00 00 00 00 00 00 - 00 63 07 10 00 00 00 00 .........c......
000000000012ebe4 00 00 00 00 68 f2 08 10 - 68 f2 08 10 00 00 00 00 ....h...h.......
000000000012ebf4 00 00 00 00 60 f2 08 10 - 60 f2 08 10 00 00 00 00 ....`...`.......
000000000012ec04 00 00 00 00 64 f2 08 10 - 64 f2 08 10 f8 af 1c 15 ....d...d.......
000000000012ec14 73 65 00 00 58 00 00 00 - 00 00 00 00 00 00 00 00 se..X...........
000000000012ec24 00 00 00 00 01 00 00 00 - 60 f2 08 10 01 02 00 00 ........`.......
000000000012ec34 06 00 00 00 00 00 00 00 - 64 d4 07 10 00 00 00 00 ........d.......
000000000012ec44 00 00 00 00 00 00 00 00 - 00 00 00 00 01 02 00 00 ................
000000000012ec54 06 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 ................
000000000012ec64 00 00 00 00 00 00 00 00 - c0 98 5d 04 01 66 00 00 ..........]..f..
000000000012ec74 dc eb 12 00 00 00 00 00 - 20 30 54 01 f4 ec 12 00 ........ 0T.....
000000000012ec84 c2 00 00 00 0d 00 00 00 - 0a ff ff ff 68 db 18 00 ............h...
000000000012ec94 00 61 37 01 0a b3 e6 9e - 68 db 18


...全文
412 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2020-03-05
  • 打赏
  • 举报
回复
引用 10 楼 smwhotjay 的回复:
调试dll很麻烦,我只会打log.分析代码。多线程时log会非常杂乱。。 你可以打log,每个函数的进入和退出都打log.同时重要的参数也log下, 先看log在哪里蹦的。
谢谢,这个的确是个办法。
smwhotjay 2020-03-04
  • 打赏
  • 举报
回复
调试dll很麻烦,我只会打log.分析代码。多线程时log会非常杂乱。。 你可以打log,每个函数的进入和退出都打log.同时重要的参数也log下, 先看log在哪里蹦的。
gouyanfen 2020-03-04
  • 打赏
  • 举报
回复
这个我不知道你用的什么,当然每次访问的时候去判断肯定是不行的,解决还得找出原因,可以动态调试试试用OD,下内存访问断点看看。
十八道胡同 2020-03-04
  • 打赏
  • 举报
回复
引用 7 楼 gouyanfen 的回复:
[quote=引用 5 楼 LCL_data 的回复:] [quote=引用 4 楼 gouyanfen 的回复:]         1001a1b5 e8161c0000       call    CSNT.Core.CalculatePrice+0x1bdd0 (1001bdd0)         1001a1ba 8b4e04           mov     ecx,[esi+0x4]         1001a1bd 85c9             test    ecx,ecx         1001a1bf 7404             jz      CSNT.Core.CalculatePrice+0x1a1c5 (1001a1c5)         1001a1c1 8b07             mov     eax,[edi] 错误 ->1001a1c3 8901             mov     [ecx],eax  从汇编上看, CSNT.Core.CalculatePrice类在初始化过程中,第一个指向的指针分配内存应该有失败的情况 第一次push ecx也就是 CSNT.Core.CalculatePrice的指针,在调用之后给成员变量赋值的过程,这个成员变量只检测了指针不为0的情况,但是这个指针是个非法的地址。 只能看懂这点了。
谢谢回复。 咱们检查申请的指针,不都是只检查指针非空吗? 指针非法地址怎么判断?[/quote] 其它操作的时如果有越界操作,有可能会破坏掉指针地址。[/quote] 你这么说也不无道理。 为避免这个情况,那就是每次使用指针之前判断地址是否非法?地址非法怎么个判断发?
gouyanfen 2020-03-04
  • 打赏
  • 举报
回复
引用 5 楼 LCL_data 的回复:
[quote=引用 4 楼 gouyanfen 的回复:]         1001a1b5 e8161c0000       call    CSNT.Core.CalculatePrice+0x1bdd0 (1001bdd0)         1001a1ba 8b4e04           mov     ecx,[esi+0x4]         1001a1bd 85c9             test    ecx,ecx         1001a1bf 7404             jz      CSNT.Core.CalculatePrice+0x1a1c5 (1001a1c5)         1001a1c1 8b07             mov     eax,[edi] 错误 ->1001a1c3 8901             mov     [ecx],eax  从汇编上看, CSNT.Core.CalculatePrice类在初始化过程中,第一个指向的指针分配内存应该有失败的情况 第一次push ecx也就是 CSNT.Core.CalculatePrice的指针,在调用之后给成员变量赋值的过程,这个成员变量只检测了指针不为0的情况,但是这个指针是个非法的地址。 只能看懂这点了。
谢谢回复。 咱们检查申请的指针,不都是只检查指针非空吗? 指针非法地址怎么判断?[/quote] 其它操作的时如果有越界操作,有可能会破坏掉指针地址。
zgl7903 2020-03-04
  • 打赏
  • 举报
回复
XP 安装RemoterDebuger 即可, 远程调试
十八道胡同 2020-03-04
  • 打赏
  • 举报
回复
引用 4 楼 gouyanfen 的回复:
        1001a1b5 e8161c0000       call    CSNT.Core.CalculatePrice+0x1bdd0 (1001bdd0)         1001a1ba 8b4e04           mov     ecx,[esi+0x4]         1001a1bd 85c9             test    ecx,ecx         1001a1bf 7404             jz      CSNT.Core.CalculatePrice+0x1a1c5 (1001a1c5)         1001a1c1 8b07             mov     eax,[edi] 错误 ->1001a1c3 8901             mov     [ecx],eax  从汇编上看, CSNT.Core.CalculatePrice类在初始化过程中,第一个指向的指针分配内存应该有失败的情况 第一次push ecx也就是 CSNT.Core.CalculatePrice的指针,在调用之后给成员变量赋值的过程,这个成员变量只检测了指针不为0的情况,但是这个指针是个非法的地址。 只能看懂这点了。
谢谢回复。 咱们检查申请的指针,不都是只检查指针非空吗? 指针非法地址怎么判断?
gouyanfen 2020-03-04
  • 打赏
  • 举报
回复
        1001a1b5 e8161c0000       call    CSNT.Core.CalculatePrice+0x1bdd0 (1001bdd0)         1001a1ba 8b4e04           mov     ecx,[esi+0x4]         1001a1bd 85c9             test    ecx,ecx         1001a1bf 7404             jz      CSNT.Core.CalculatePrice+0x1a1c5 (1001a1c5)         1001a1c1 8b07             mov     eax,[edi] 错误 ->1001a1c3 8901             mov     [ecx],eax  从汇编上看, CSNT.Core.CalculatePrice类在初始化过程中,第一个指向的指针分配内存应该有失败的情况 第一次push ecx也就是 CSNT.Core.CalculatePrice的指针,在调用之后给成员变量赋值的过程,这个成员变量只检测了指针不为0的情况,但是这个指针是个非法的地址。 只能看懂这点了。
十八道胡同 2020-03-04
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
VS 调试菜单 异常 开启 WIN32 c0000005 异常,调试运行, 奔溃的c0000005时就会弹窗, 重试 即可看到调用堆栈, 逐级回退分析
winxp是个裸机,啥都没装,这么说来,需要在xp按照vs了?
zgl7903 2020-03-04
  • 打赏
  • 举报
回复
VS 调试菜单 异常 开启 WIN32 c0000005 异常,调试运行, 奔溃的c0000005时就会弹窗, 重试 即可看到调用堆栈, 逐级回退分析
十八道胡同 2020-03-04
  • 打赏
  • 举报
回复
CSNT.Core.CalculatePrice.dll 就是我的C++ dll,他在重复的调用Init方法,每次在第3次或者第4次的时候就闪退了 不是每次都闪退,很苦恼。。。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧