Неправильная запись исключения в мини-дампе - PullRequest
0 голосов
/ 29 мая 2019

У меня есть два файла мини-дампов, оба имеют запись об исключении.Странно то, что если я вручную оцениваю код на 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 в записи об исключении получил неправильное значение, но как это могло произойти?Я имею в виду, что запись об исключении сохранила состояние, когда произошло исключение, поэтому, когда процессор выполняется в 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
...