应用程序加载模块时闪退

C/C++本地代码调试

应用程序加载模块时闪退


BianChengNan 2015-09-09, 19:47 下午
如题,用nsis生成了一个安装包(木有安装包的符号文件),在某些机器上会出现双击运行闪退的情况。

用windbg调试的部分结果,已经通过sxe ld设置了加载模块的断点,几次试验后发现加载SHLWAPI.dll这里总是有问题。

 g
ModLoad: 75830000 75887000   C:\Windows\syswow64\SHLWAPI.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=7efdd000 edi=0018f4a8
eip=76f2fc5e esp=0018f37c ebp=0018f3d0 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!ZwMapViewOfSection+0x12:
76f2fc5e 83c404          add     esp,4
0:000> kn
 # ChildEBP RetAddr  
00 0018f37c 76f4a3f8 ntdll!ZwMapViewOfSection+0x12
01 0018f3d0 76f4b0ca ntdll!LdrpMapViewOfSection+0xc7
02 0018f4c4 76f4cda4 ntdll!LdrpFindOrMapDll+0x345
03 0018f734 76f4d534 ntdll!LdrpLoadImportModule+0x287
04 0018f764 76f4d5ac ntdll!LdrpHandleOneOldFormatImportDescriptor+0x88
05 0018f778 76f4d4a7 ntdll!LdrpHandleOldFormatImportDescriptors+0x1c
06 0018f800 76f4b44b ntdll!LdrpProcessStaticImports+0x256
07 0018fa60 76f4d534 ntdll!LdrpLoadImportModule+0x340
08 0018fa90 76f4d5ac ntdll!LdrpHandleOneOldFormatImportDescriptor+0x88
09 0018faa4 76f4d4a7 ntdll!LdrpHandleOldFormatImportDescriptors+0x1c
0a 0018fb2c 76f56c06 ntdll!LdrpProcessStaticImports+0x256
0b 0018fcb0 76f5584d ntdll!LdrpInitializeProcess+0x120d
0c 0018fd00 76f49239 ntdll!_LdrpInitialize+0x78
0d 0018fd10 00000000 ntdll!LdrInitializeThunk+0x10
0:000> r
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=7efdd000 edi=0018f4a8
eip=76f2fc5e esp=0018f37c ebp=0018f3d0 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!ZwMapViewOfSection+0x12:
76f2fc5e 83c404          add     esp,4
0:000> t
eax=00000000 ebx=00000000 ecx=41e00000 edx=0008e3c8 esi=fffffffe edi=00000000
eip=76fb129b esp=0018fb08 ebp=0018fb34 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
76fb129b cc              int     3

通过r命令看到当前eip的值是76f2fc5e 83c404          add     esp,4
但是t一下,居然就到了76fb129b cc              int     3
实在想不通什么情况会导致这么诡异的问题。

现有疑问如下:
1. 我明明设置了windbg为默认调试器,AeDebug下的Auto也设置成1了,但是双击有问题的exe还是闪退(难道没产生异常?被我下面的实验否定了)
2. 我用windbg启动有问题的exe,sxe ld这样一点一点的调,定位到加载shlwapi.dll的时候报告了一个int 3,说明触发了异常,但是为啥1中未跳到windbg中呢?
3. 一般这种问题会是什么原因引起的呢?什么样的情况,应用程序非正常退出却不跳到调试器里?难道系统哪里有设置?
附件是dmp,有兴趣的朋友可以帮忙看看,多谢啦!(额,附件不能传dmp文件)

补充:后来想起来了,应该是没触发断点(有调试器的时候才会触发一个int 3,辅助调试)说以上面的疑问1和2应该是没有发生任何异常。

Powered by Community Server Powered by CnForums.Net