gpt4 book ai didi

windows - 崩溃后获取 DLL 地址的函数

转载 作者:可可西里 更新时间:2023-11-01 12:08:08 26 4
gpt4 key购买 nike

我知道当应用程序崩溃时,系统会报告它在 mydll.dll 中的 0x00004b79 位置崩溃。我有源代码和二进制文件,但我没有 PDB 或该 DLL 构建中的任何列表文件。

崩溃是可重复的,但我无法在生产机器上安装调试器,并且在开发或调试环境中不会发生崩溃。我已经设置了 Dr. Watson,并且有故障转储和 Dr. Watson 日志文件。

Dr. Watson 日志文件包含正在执行的函数的反汇编:

        10604b70 8b442408         mov     eax,[esp+0x8]
10604b74 8b542404 mov edx,[esp+0x4]
10604b78 50 push eax
FAULT ->10604b79 8b4120 mov eax,[ecx+0x20] ds:0023:00000020=????????
10604b7c 52 push edx
10604b7d 6801800000 push 0x8001
10604b82 50 push eax
10604b83 ff156c946210 call dword ptr [mydll!DllUnregisterServer+0x1720c (1062946c)]
10604b89 c20800 ret 0x8

(INT 3 指令在上面的汇编代码段之前和之后。)

堆栈跟踪仅包含地址 mydll+0x4b79。它不提供任何来电者信息。

在 windbg 中加载故障转储没有提供任何额外信息。

我如何确定崩溃发生在哪个函数(或者更好的是哪一行代码)?

最佳答案

创建应用程序的故障转储并使用调试器检查它,WinDbg 是这里显而易见的选择。故障转储将为您提供堆栈跟踪和详细的错误信息。

编辑:至于不能安装调试器,DrWatson 是预装的并且能够生成故障转储,然后可以在不同的机器上检查。

关于windows - 崩溃后获取 DLL 地址的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746990/

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