Een webapplicatie die voor ons ontwikkeld is heeft stabiliteitsproblemen. De leverancier heeft gevraagd om WinDBG crashdumps maar aangezien dit probleem al ongeveer een jaar speelt, wil ik mij er zelf ook verdiepen. Van de leverancier hoeven we weinig te verwachten (Israelisch bedrijf, communicatie gaat erg stroef).
Zonder de broncode en PDB bestanden wordt het lastig, maar ik wil toch een poging wagen.
Na het laden van de crashdump zie ik dit:
Het valt mij op dat ecx en edx gelijk zijn maar dat kan geen kwaad denk ik.
!analyze -v bevestigt ook dat het schrijven naar 72994b94 de access violation veroorzaakt.
De callstack laat niks zinnigs zien omdat symbols niet aanwezig zijn.
Ik vraag me af hoe ik achterhalen waar edx de waarde 72657354 kreeg want dat lijkt het probleem te zijn.
Met uf kan ik wel iets zien, maar niet de flow achterhalen waar edx nu 72657354 kreeg.
Ik zie "LAST_CONTROL_TRANSFER: from 0066f5f9 to 00640e2b" maar vanuit daar loop ik last omdat uf 0066f5f9 alleen dit oplevert:
Verder vind ik nergens meer die 0066f5f9 terug.
Die CLIENT_CERTS_STORE::operator zie ik dus overal, maar dat komt omdat er geen symbols zijn die het vertaalt naar de goede functie naam.
Moet ik dit debuggen via WinDBG maar opgeven of kan ik toch nog ergens inzicht krijgen in wat er gebeurt?
Zonder de broncode en PDB bestanden wordt het lastig, maar ik wil toch een poging wagen.
Na het laden van de crashdump zie ik dit:
code:
1
2
3
4
5
6
| 0:000> r eax=0000002e ebx=7ffff000 ecx=72657354 edx=72657354 esi=041ea94c edi=0033fb90 eip=00640e2b esp=0033d81c ebp=0033f774 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010202 mgrntw!CLIENT_CERTS_STORE::operator=+0x23357c: 00640e2b 888415cce0ffff mov byte ptr [ebp+edx-1F34h],al ss:0023:72994b94=?? |
Het valt mij op dat ecx en edx gelijk zijn maar dat kan geen kwaad denk ik.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| 0:000> !vprot edx !vprot: No containing memory region found 0:000> !vprot 72994b94 !vprot: No containing memory region found 0:000> ? ebp Evaluate expression: 3405684 = 0033f774 0:000> !vprot ebp BaseAddress: 00331000 AllocationBase: 00040000 AllocationProtect: 00000004 PAGE_READWRITE RegionSize: 0000f000 State: 00001000 MEM_COMMIT Protect: 00000004 PAGE_READWRITE Type: 00020000 MEM_PRIVATE |
!analyze -v bevestigt ook dat het schrijven naar 72994b94 de access violation veroorzaakt.
De callstack laat niks zinnigs zien omdat symbols niet aanwezig zijn.
Ik vraag me af hoe ik achterhalen waar edx de waarde 72657354 kreeg want dat lijkt het probleem te zijn.
Met uf kan ik wel iets zien, maar niet de flow achterhalen waar edx nu 72657354 kreeg.
code:
1
2
3
4
5
6
7
8
9
10
| 0:000> uf 00640e2b mgrntw!CLIENT_CERTS_STORE::operator=+0x23350e: 00640dbd 8b95a8e0ffff mov edx,dword ptr [ebp-1F58h] 00640dc3 8b0a mov ecx,dword ptr [edx] 00640dc5 81c1103b0000 add ecx,3B10h 00640dcb e8167bdcff call mgrntw!get_ctrl_hwnd_by_name+0x53b6 (004088e6) 00640dd0 83f801 cmp eax,1 00640dd3 7f29 jg mgrntw!CLIENT_CERTS_STORE::operator=+0x23354f (00640dfe) *knip hele rij code* |
Ik zie "LAST_CONTROL_TRANSFER: from 0066f5f9 to 00640e2b" maar vanuit daar loop ik last omdat uf 0066f5f9 alleen dit oplevert:
code:
1
2
3
4
5
| 0:000> uf 0066f5f9 mgrntw!CLIENT_CERTS_STORE::operator=+0x261d4a: 0066f5f9 8be5 mov esp,ebp 0066f5fb 5d pop ebp 0066f5fc c20800 ret 8 |
Verder vind ik nergens meer die 0066f5f9 terug.
Die CLIENT_CERTS_STORE::operator zie ik dus overal, maar dat komt omdat er geen symbols zijn die het vertaalt naar de goede functie naam.
Moet ik dit debuggen via WinDBG maar opgeven of kan ik toch nog ergens inzicht krijgen in wat er gebeurt?