在崩溃后获取DLL地址的函数

时间:2010-09-19 18:46:42

标签: windows debugging dll

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

如何确定发生崩溃的功能(甚至更好的代码)?

1 个答案:

答案 0 :(得分:2)

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

编辑:至于无法安装调试器,DrWatson已预先安装并能够生成故障转储,然后可以在另一台计算机上进行检查。