崩溃后获取 DLL 地址的函数

发布于 2024-09-24 12:52:39 字数 939 浏览 3 评论 0 原文

我知道当应用程序崩溃时,系统会报告它在 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 中加载故障转储没有提供任何附加信息。

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

I know that when an application crashes, the system reports that it crashed at location 0x00004b79 in mydll.dll. I have the source code, and I have the binary, but I don't have a PDB or any listing files from the build of that DLL.

The crash is repeatable, but I can't install a debugger on the production machine, and the crash does not occur in development or debugging environments. I have set up Dr. Watson, and I have a crash dump and Dr. Watson log file.

The Dr. Watson log file contains this disassembly for the function that was being executed:

        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 instructions precede and succeed the assembly snippet above.)

The stack trace only includes the address mydll+0x4b79. It doesn't give any caller information.

Loading up the crash dump in windbg didn't provide any additional information.

How can I determine in what function (or even better, which line of code) the crash occurred?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断舍离 2024-10-01 12:52:39

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

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

Create a crash dump of your application and exmaine it using a debugger, WinDbg is the obvious choice here. A crash dump will give you a stack trace and detailed error information.

Edit: As for not being able to install a debugger, DrWatson is preinstalled and able to generate crash dumps which can then be examined on a different machine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文