Windows Mobile debugger memory exhaustion

By dose | January 4, 2012
Under: Uncategorized

Heute hatte ich ein interessantes Problem mit meiner Windows Mobile Applikation. ICh habe es durch fehlerhafte Programmierung geschafft, den Windows Mobile Debugger des Visual Studio 2005 zu crashen.

Das Problem war, dass ich eine Funktion in einer fremden Library mehrfach aufgerufen habe und diese Funktion hat jedesmal einen Thread gestartet. Dadurch habe ich eine riesige Menge Threads generiert. Pro Thread muss der Debugger natürlich Speicher reservieren, was dazu führt, dass ihm der Speicher irgendwann mal ausgeht, wenn da hunderte Threads starten und sich wieder beenden, vorher aber schon wieder neue Threads gestartet werden…

Interessanterweise führte das Ganze aber nicht zu einem OOM, sondern der Debugger stürzte irgendwann mal ab. Hierfür dürfte ein fehlender Check im Debugger-Code von C:\Programme\Microsoft Visual Studio 8\SmartDevices\Debugger\bin\eDE.dll schuld sein (und das trotz installiertem SP1). Der Crash tritt an folgender Stelle auf:

6EDC070E   83C0 08          ADD EAX,8
6EDC0711   3BC7             CMP EAX,EDI
6EDC0713   74 1C            JE SHORT eDE.6EDC0731
6EDC0715   8B30             MOV ESI,DWORD PTR DS:[EAX]
EAX = 8, EDI = 0

Wir schließen daraus, dass EAX hier nicht auf 0 geprüft wird sondern nur der Wert auf Offset 8 der Struktur, was schulssendlich zu einem Crash führt. Ich hab das Ganze gefixt, indem ich das ADD EAX, 8 hinter den Check verschoben habe, sodass nun der Zeiger auf 0 gprüft wird (dafür aber der Wert auf Offset 8 nicht mehr). Dies bewirkte immerhin, dass der Debugger nicht mehr crasht, scheinbar ist also doch die Wahrscheinlichkeit höher, dass der Strukturzeiger fehlt:

6EDC070E   3BC7             CMP EAX,EDI
6EDC0710   74 1F            JE SHORT eDE.6EDC0731
6EDC0712   83C0 08          ADD EAX,8

Falls also jemand einen Crash in eDE.dll beim Debuggen hat, kann er meinen Patch theoretisch ausprobieren, vielleicht hilft es ja was.

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :