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++本地代码调试

帖子发起人: HiJack   发起时间: 2014-03-18 15:39 下午   回复: 4

Print Search
帖子排序:    
   2014-03-18, 15:39 下午
lhwqqq 离线,最后访问时间: 2022/10/20 7:57:16 HiJack

发帖数前50位
注册: 2013-12-27
发 贴: 21
大神们,请教分析64位dump文件方法
Reply Quote
各位高手,我的程序在64位机器崩溃,获取到dump文件。然后到我的32位机器下用32位的windbg分析,我的操作步骤如下:

1 先用 .effmach amd64指令切换到64位模式
0:008:x86> .effmach amd64

2 然后在加载符号

3 然后运行!analyze -v 命令分析,但STACK_TEXT里没有我的模块信息。FAULTING_IP: FOLLOWUP_IP: 都是我的模块。我用~*kvn打印所有堆栈信息,也看不到我的函数调用栈,只能看到系统的。难道我操作错了吗?还望大神指点。

例如我用命令k 
打印出来的却是这样:没有我的程序的信息,都是系统的

0:001> k
Child-SP          RetAddr           Call Site
00000000`00e6e9b8 00000000`74be2bcd wow64cpu!CpupSyscallStub+0x9
00000000`00e6e9c0 00000000`74c5d07e wow64cpu!Thunk0ArgReloadState+0x1a
00000000`00e6ea80 00000000`74c5c549 wow64!RunCpuSimulation+0xa
00000000`00e6ead0 00000000`76febde7 wow64!Wow64LdrpInitialize+0x429
00000000`00e6f020 00000000`76fa2aae ntdll! ?? ::FNODOBFM::`string'+0x2b064
00000000`00e6f090 00000000`00000000 ntdll!LdrInitializeThunk+0xe



附上分析结果

FAULTING_IP: 
HttpService_cURL_Single_U!TEP::HttpService::ErrorInfo::getErrorInfoA+186
00000000`70935de6 8b4a04          mov     ecx,dword ptr [rdx+4]

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000070935de6 (HttpService_cURL_Single_U!TEP::HttpService::ErrorInfo::getErrorInfoA+0x0000000000000186)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000000
   Parameter[1]: 0000000000000004
Attempt to read from address 0000000000000004

PROCESS_NAME:  mCloudmgr.exe

OVERLAPPED_MODULE: Address regions for 'FWPUCLNT' and 'wship6' overlap

ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx

EXCEPTION_PARAMETER1:  0000000000000000

EXCEPTION_PARAMETER2:  0000000000000004

READ_ADDRESS:  0000000000000004 

FOLLOWUP_IP: 
HttpService_cURL_Single_U!TEP::HttpService::ErrorInfo::getErrorInfoA+186
00000000`70935de6 8b4a04          mov     ecx,dword ptr [rdx+4]

MOD_LIST: <ANALYSIS/>

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

LAST_CONTROL_TRANSFER:  from 0000000074c5cb12 to 0000000074c5c9f1

FAULTING_THREAD:  ffffffffffffffff

BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_READ

PRIMARY_PROBLEM_CLASS:  NULL_CLASS_PTR_DEREFERENCE

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE

STACK_TEXT:  
00000000`0308df30 00000000`74c5cb12 : 00000000`0308df80 00000000`0001003f 0000401d`a64f919e 40000000`00000001 : wow64!Wow64NotifyDebugger+0x1d
00000000`0308df60 00000000`74c5cc48 : 00000000`03dce62c 00000000`7ef2e000 00000000`7ef30000 00000000`0308c000 : wow64!HandleRaiseException+0xee
00000000`0308e2c0 00000000`74c76a11 : 00000000`00000000 00000000`77bb4c3d 00000000`0308e600 00000000`03dce5d0 : wow64!Wow64NtRaiseException+0x88
00000000`0308e620 00000000`74c5cf87 : 00000000`00000000 00000000`03dcda40 00000000`7ef2e000 00000000`7ef30000 : wow64!whNtRaiseException+0x15
00000000`0308e650 00000000`74be276d : 00000000`750d72af 00000000`00000023 00000000`03dce5dc 00000000`03dce210 : wow64!Wow64SystemServiceEx+0xd7
00000000`0308ef10 00000000`74c5d07e : 00000000`00000000 00000000`74be1920 00000000`00000000 00000000`00000000 : wow64cpu!TurboDispatchJumpAddressEnd+0x24
00000000`0308efd0 00000000`74c5c549 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : wow64!RunCpuSimulation+0xa
00000000`0308f020 00000000`76febde7 : 00000000`00000000 00000000`7efdf000 00000000`7ef2e000 00000000`00000000 : wow64!Wow64LdrpInitialize+0x429
00000000`0308f570 00000000`76fa2aae : 00000000`0308f630 00000000`00000000 00000000`7efdf000 00000000`00000000 : ntdll! ?? ::FNODOBFM::`string'+0x2b064
00000000`0308f5e0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!LdrInitializeThunk+0xe


SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  httpservice_curl_single_u!TEP::HttpService::ErrorInfo::getErrorInfoA+186

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: HttpService_cURL_Single_U

IMAGE_NAME:  HttpService_cURL_Single_U.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  531ee7e4

STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~8s; .ecxr ; kb

FAILURE_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE_c0000005_HttpService_cURL_Single_U.dll!TEP::HttpService::ErrorInfo::getErrorInfoA

BUCKET_ID:  X64_APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_READ_httpservice_curl_single_u!TEP::HttpService::ErrorInfo::getErrorInfoA+186

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/mCloudmgr_exe/1_0_0_17/5323acae/HttpService_cURL_Single_U_dll/1_0_1_8/531ee7e4/c0000005/00005de6.htm?Retriage=1

Followup: MachineOwner
 




IP 地址: 已记录   报告
   2014-03-18, 20:15 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 大神们,请教分析64位dump文件方法
Reply Quote
你的应用是32位,以WoW方式运行在64位系统上,使用32位WinDBG打开时,0:008:x86>提示符表示已经在32位上下文,为何还要.effmach amd64 ?

直接k就行了

明显是空指针啊,访问空对象偏移4的字段


IP 地址: 已记录   报告
   2014-03-19, 11:24 上午
lhwqqq 离线,最后访问时间: 2022/10/20 7:57:16 HiJack

发帖数前50位
注册: 2013-12-27
发 贴: 21
Re: 大神们,请教分析64位dump文件方法
Reply Quote
谢谢张老师指点,仔细看了一下.effmach指令,是我用错了。还有这个空指针的错误,我也明白,因为edx是0了。

但由于我初学Windbg有许多细节不是很明白,

比如有时WinDbg提示

ADDITIONAL_DEBUG_TEXT:  Followup set based on attribute [Is_ChosenCrashFollowupThread] from Frame:[0] on thread:[PSEUDO_THREAD]
这个代表什么意思? 虽说可以根据DEFAULT_BUCKET_ID能看出大概,但我还是想知道,我觉得,Windbg给出的信息应该都是有用的。谢谢张老师

IP 地址: 已记录   报告
   2014-03-19, 20:51 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 大神们,请教分析64位dump文件方法
Reply Quote
这句话对英语是外语的人来说是有难度的 :-)

这句话是用来说明!analyze结果里的另一个重要字段Followup的,Followup字段的意思就是这个问题“接下来应该找谁”。

要知道对于一个严重的BUG来说,谁都不愿意看到自己的名字出现在Followup后,要加班的!哈哈

因为Followup结论是根据规则自动产生的,于是就可能不准确,就可能有人抵赖,因此就有必要解释一下


上面所引用的这句翻译成白话就是:这个问题“接下来应该找谁”这个结论是基于Is_ChosenCrashFollowupThread这个属性,从线程【PSEUDO_THREAD】的0号栈帧得出的

IP 地址: 已记录   报告
   2014-03-19, 23:53 下午
lhwqqq 离线,最后访问时间: 2022/10/20 7:57:16 HiJack

发帖数前50位
注册: 2013-12-27
发 贴: 21
Re: 大神们,请教分析64位dump文件方法
Reply Quote
 谢谢张老师,但Is_ChosenCrashFollowupThread和PSEUDO_THREAD(伪线程)这些信息,我怎在Windbg的帮助信息搜索不到?而且PSEUDO_THREAD有时候会是0xffffffff,这怎么理解呢?嘿嘿 ,真是麻烦您了

IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 大神们,请教分析64位dump文件方法

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