Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: BianChengNan   发起时间: 2015-09-09 19:47 下午   回复: 0

Print Search
帖子排序:    
   2015-09-09, 19:47 下午
BianChengNan 离线,最后访问时间: 2017/7/22 6:43:39 BianChengNan

发帖数前25位
注册: 2013-07-05
发 贴: 39
应用程序加载模块时闪退
Reply Quote
如题,用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应该是没有发生任何异常。

IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » 应用程序加载模块时闪退

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.