4

现在我有崩溃信息:

TestAPP 在 0023:5763c230 的模块 XCrashReportTest.exe 中导致访问冲突 (0xc0000005)。

Context:
EDI:    0x002aee0c  ESI: 0x002ad7f4  EAX:   0x00000000
EBX:    0x00000000  ECX: 0x57635670  EDX:   0x028c1d27
EIP:    0x5763c230  EBP: 0x002aee18  SegCs: 0x00000023
EFlags: 0x00010246  ESP: 0x002ad554  SegSs: 0x0000002b

Bytes at CS:EIP:                                                 
8b 08 52 50 8b 41 18 ff d0 8b 0d c8 e0 66 57 8b                  

Stack:                                                           
0x002ad554: 576504f7 002aee0c 002ad7f4 002ad570 ..eW..*...*.p.*. 
0x002ad564: 002aee0c 5763c201 002aee18 002ad59c ..*...cW..*...*. 
0x002ad574: 576490b1 5763c201 002aee0c 00000100 ..dW..cW..*..... 
0x002ad584: 002ad5f4 57648d9f 75785eaa 57668e70 ..*...dW.^xup.fW 
0x002ad594: 002aee0c 00000001 002ad604 5764d4d2 ..*.......*...dW 
0x002ad5a4: 002aee0c 57668e70 5763c201 00000000 ..*.p.fW..cW.... 
0x002ad5b4: 00000100 75785d2a 57668e5c 002aee0c ....*]xu\.fW..*. 
0x002ad5c4: 57668e4c 002add84 00000000 00000000 L.fW..*.........

我指的是 XCrashReport[XCrashReport : 异常处理和崩溃报告 - 第 1 部分

但是我发现当我在同一台机器上运行相同的 *.exe 时,有时 EIP 会有所不同。所以,有时我无法将崩溃代码行与 EIP 匹配(XCrashReport 中描述的方法:异常处理和崩溃报告 - 第 1 部分。我不知道如何使用堆栈信息。

任何人都可以帮助我吗?

4

1 回答 1

3

唯一合理的方法是将故障转储加载到调试器中并提供符号,即 .pdb 文件。这可能很棘手,因为 pdb 文件可能没有足够的信息。像微软这样的公司提供的公共 PDB 文件没有关于本地变量名称和其他详细信息的信息。具有完整信息的 PDB 称为公共 PDB。

有时堆栈会损坏,这会导致“失去控制”。代码获取返回地址,即一些垃圾,将这个值加载到 EIP 并从那里开始执行指令。在这种情况下,在执行了几个“指令”之后,崩溃很快就会发生。

我的意思是你需要先弄清楚你的 EIP 是否指向任何代码。

于 2012-10-14T18:49:37.853 回答