小型转储中的异常记录错误

时间:2019-05-29 03:23:10

标签: debugging windbg

我有两个迷你转储文件,两个文件中都有一个异常记录。奇怪的是,如果我在eip处手动评估代码,则结果与异常记录不匹配: .ecxr告诉我我正在尝试读取20bda4d4,这是当前线程堆栈中的有效地址,它不应捕获异常:

0:048> .ecxr
eax=00000055 ebx=00000004 ecx=00000240 edx=0c748da8 esi=00000240 edi=0d364b18
eip=50de2523 esp=20bda404 ebp=20bdadc8 iopl=0 nv up ei pl zr na pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246
syMain+0x683:
50de2523 8b9d0cf7ffff mov ebx,dword ptr [ebp-8F4h] ss:002b:20bda4d4=00000000

.exr -1告诉我我试图在209da4d4处读取,该地址无效,并捕获了异常:

0:048> .exr -1
ExceptionAddress: 50de2523 (syMain+0x00000683)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 00000000
Parameter[1]: 209da4d4
Attempt to read from address 209da4d4

让我感到困惑的是,异常记录中的ebp似乎有一个错误的值,但是那怎么会发生呢?我的意思是异常记录会在发生异常时保存状态,因此,当cpu在50de2523执行:mov ebx,dword ptr [ebp-8F4h]并触发异常时,ebp应该立即保存在异常记录中。那么我在这里丢失了什么吗?如果有人可以帮助,将非常感激。

以下是Windbg提供的更多信息:

0:048> !teb
TEB at ffe7d000
ExceptionList: 20bd9e10
StackBase: 20be0000
StackLimit: 20ae0000
SubSystemTib: 00000000
FiberData: 00001e00
ArbitraryUserPointer: 00000000
Self: ffe7d000
EnvironmentPointer: 00000000
ClientId: 000023f4 . 00002140
RpcHandle: 00000000
Tls Storage: 0051df30
PEB Address: fffde000
LastErrorValue: 0
LastStatusValue: c0000023
Count Owned Locks: 0
HardErrorMode: 0

0:048> ub syMain+0x683
syMain+0x671:
50de2511 03c0            add     eax,eax
50de2513 8bd8            mov     ebx,eax
50de2515 668b02          mov     ax,word ptr [edx]
50de2518 03d3            add     edx,ebx
50de251a 6689044f        mov     word ptr [edi+ecx*2],ax
50de251e 41              inc     ecx
50de251f 3bce            cmp     ecx,esi
50de2521 7cf2            jl      syMain+0x675 (50de2515)

0:048> u syMain+0x683
syMain+0x683:
50de2523 8b9d0cf7ffff    mov     ebx,dword ptr [ebp-8F4h]
50de2529 8bbdecf6ffff    mov     edi,dword ptr [ebp-914h]
50de252f 8b5508          mov     edx,dword ptr [ebp+8]
50de2532 47              inc     edi
50de2533 89bdecf6ffff    mov     dword ptr [ebp-914h],edi
50de2539 3bfa            cmp     edi,edx
50de253b 0f8c7ffdffff    jl      syMain+0x420 (50de22c0)
50de2541 85db            test    ebx,ebx

0 个答案:

没有答案