崩溃调试Win32应用程序

时间:2013-06-06 17:27:45

标签: debugging crash windbg crash-dumps

我花了很多时间对Win32应用程序进行崩溃调试。我非常好奇的一件事是,如何找到任何地址是否属于堆栈/堆或程序代码部分。是否有任何windbg / ollydbg插件可用于此目的?或者我要从内存映射中手动操作? 例如:

0:000> r
eax=00930264 ebx=008e0000 ecx=41414592 edx=00930000 esi=41414141 edi=008e0441
eip=00407289 esp=0012fae0 ebp=0012faf4 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00010206
MyApp+0x7289:
00407289 8b1437          mov     edx,dword ptr [edi+esi] ds:0023:41cf4582=????????
0:000> u eip
MyApp+0x7289:
00407289 8b1437          mov     edx,dword ptr [edi+esi]
0040728c 8b4c3704        mov     ecx,dword ptr [edi+esi+4]
00407290 57              push    edi
00407291 e89ae8ffff      call    MyApp+0x5b30 (00405b30)
00407296 897d14          mov     dword ptr [ebp+14h],edi
00407299 5f              pop     edi
0040729a 85c0            test    eax,eax
0040729c 741e            je      MyApp+0x72bc (004072bc)

在这种情况下,我想知道哪个寄存器指向哪个部分(代码/堆栈/堆),以便我可以继续进行根本原因。

先谢谢。

1 个答案:

答案 0 :(得分:2)

0:000> ?@esi+@edi
Evaluate expression: 36278408 = 02299088
0:000> !address 02299088
 ProcessParametrs 00311020 in range 00310000 00410000
 Environment 02294848 in range 02290000 02390000
    02290000 : 02290000 - 00100000
                    Type     00020000 MEM_PRIVATE
                    Protect  00000004 PAGE_READWRITE
                    State    00001000 MEM_COMMIT
                    Usage    RegionUsageHeap
                    Handle   00310000