gpt4 book ai didi

c++ - 如何从堆栈中找到崩溃的代码行?

转载 作者:可可西里 更新时间:2023-11-01 14:15:01 25 4
gpt4 key购买 nike

现在我有了崩溃信息:

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

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 部分。我不知道如何使用堆栈信息。

谁能帮帮我?

最佳答案

执行此操作的唯一合理方法是将故障转储加载到调试器中并提供符号,即 .pdb 文件。这可能很棘手,因为 pdb 文件可能没有足够的信息。微软等公司发布的公共(public) PDB 文件不包含有关本地变量名称和其他详细信息的信息。具有完整信息的PDB称为公共(public)PDB。

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

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

关于c++ - 如何从堆栈中找到崩溃的代码行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com