现在我有崩溃信息:
TestAPP导致访问冲突(0xc0000005) 在模块XCrashReportTest.exe中,电话0023:5763c230。
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部分)相匹配。我不知道如何使用堆栈信息。
任何人都可以帮助我?
答案 0 :(得分:3)
这样做的唯一合理方法是将崩溃转储加载到调试器中并提供符号,即.pdb文件。这可能很棘手,因为pdb文件可能没有足够的信息。像Microsoft这样的公司提供公共PDB文件,这些文件没有关于本地变量名称和其他详细信息的信息。具有完整信息的PDB称为公共PDB。
有时堆栈会被破坏,导致“失去控制”。代码获取返回地址,即一些垃圾,将此值加载到EIP并从那里开始执行指令。在这种情况下,在执行了几条“指令”后,崩溃很快就会发生。
我的意思是你需要弄清楚你的EIP是否首先指向任何代码。