2016-07-09 14 views
2

Einer der Kunden unserer Software beschwerte sich, dass es auf seinem Windows XP-Rechner abstürzte. Ich fragte ihn, ProcDump zum Herunterladen und unser Prozess durch sie als solche ausgeführt:Crashdump, der von einem anderen Betriebssystem abgerufen wurde, zeigt auf die Nachrichtenschleife. Wie komme ich von dort zum Fehlerort? (TeamViewer stürzt meinen Prozess ab.)

procdump -e -ma -w myproc.exe 

für die der Nutzer per E-Mail mich gesammelt Crash-Dump .dmp Datei.

Dann stellte ich, dass .dmp Datei in denselben Ordner wie die Original .exe Bilddatei für den Prozess, sowie die .pdb Datei, und lief die .dmp Datei durch Visual Studio 2010:

enter image description here

Dann, wenn ich klickte "Debuggen mit nativen nur" VS zeigte den Quellcode für die MFC 's-Schleife mit der Zeigerposition nach DispatchMessage Anruf (siehe grüner Pfeil):

enter image description here

hat der Call-Stack nicht viel helfen, entweder:

enter image description here

und wenn ich an den gemeldeten Fehleradresse gesprungen, ich habe nichts:

enter image description here

Die App wurde in VS 2008 als eine dialogbasierte C++/MFC-Anwendung kompiliert.

Also überprüfe ich die Größe der .dmp Datei und es ist 26,6 MB. Da sind Daten drin. Die Frage, die ich habe, ist, wie kann ich nützlichere Informationen daraus erhalten, um den Ort des Fehlers im Quellcode zu lokalisieren?

PS. Im Nachhinein habe ich gesehen, dass der Absturz unter Windows XP passiert, während ich diese Crash-Dump-Datei unter Windows 8.1 ausgeführt habe: .dmp. Ist das der Grund, warum ich Müll im Stack-Trace bekomme?

EDIT: Hier ist, was ich in Disassembler, wenn ich versuche, Parameter in MSG Struktur zu sehen, dass DispatchMessage aufgerufen wurde:

enter image description here

Auch wenn ich versuche, Werte zu sehen in pState ich symbol not found bekommen .

EDIT 2: Bezüglich Module und das Modul in den Fehler EIP Adresse geladen. Die Speicher-Slot für 0x1963AB50 scheint nicht von einem Modul belegt werden:

enter image description here

EDIT 3: Sorry, es wird immer zu lang. Ich öffnete schließlich den Crash-Dump in WinDbg und tat !analyze -v Befehl darauf. Hier ist die Ausgabe.Es scheint, wie die DLL, die/entladen wurde fehlt, ist tv_w32.dll:

Microsoft (R) Windows Debugger Version 10.0.10586.567 X86 
Copyright (c) Microsoft Corporation. All rights reserved. 


Loading Dump File [C:\Users\User\Desktop\Myproc\Release\Myproc.exe_160708_141237.dmp] 
User Mini Dump File with Full Memory: Only application data is available 

Comment: ' 
*** procdump -e -ma -w Myproc.exe 
*** Unhandled exception: C0000005.ACCESS_VIOLATION' 

************* Symbol Path validation summary ************** 
Response       Time (ms)  Location 
Deferred          srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols 
Symbol search path is: srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols 
Executable search path is: 
Windows XP Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible 
Product: WinNt, suite: SingleUserTS 
Machine Name: 
Debug session time: Fri Jul 8 05:12:39.000 2016 (UTC - 7:00) 
System Uptime: 9 days 6:05:50.960 
Process Uptime: 3 days 5:08:52.000 
..................................... 
Loading unloaded module list 
.. 
This dump file has an exception of interest stored in it. 
The stored exception information can be accessed via .ecxr. 
(ba4.4a4): Access violation - code c0000005 (first/second chance not available) 
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50 
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0   nv up ei pl nz na po nc 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000202 
<Unloaded_tv_w32.dll>+0x8536: 
19608536 ??    ??? 
0:000> .bugcheck 
      ^Syntax error in '.bugcheck' 
0:000> !analyze -v 
******************************************************************************* 
*                    * 
*      Exception Analysis         * 
*                    * 
******************************************************************************* 


DUMP_CLASS: 2 

DUMP_QUALIFIER: 400 

CONTEXT: (.ecxr) 
eax=00000001 ebx=00000002 ecx=7c92741c edx=7c98e174 esi=1963ab50 edi=1963ab50 
eip=19608536 esp=0012ee3c ebp=0012ee5c iopl=0   nv up ei pl nz na po nc 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00000202 
<Unloaded_tv_w32.dll>+0x8536: 
19608536 ??    ??? 
Resetting default scope 

FAULTING_IP: 
tv_w32!unloaded+8536 
19608536 ??    ??? 

EXCEPTION_RECORD: (.exr -1) 
ExceptionAddress: 19608536 (<Unloaded_tv_w32.dll>+0x00008536) 
    ExceptionCode: c0000005 (Access violation) 
    ExceptionFlags: 00000000 
NumberParameters: 2 
    Parameter[0]: 00000000 
    Parameter[1]: 19608536 
Attempt to read from address 19608536 

DEFAULT_BUCKET_ID: BAD_INSTRUCTION_PTR 

PROCESS_NAME: Myproc.exe 

ERROR_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s. 

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s. 

EXCEPTION_CODE_STR: c0000005 

EXCEPTION_PARAMETER1: 00000000 

EXCEPTION_PARAMETER2: 19608536 

READ_ADDRESS: 19608536 

FOLLOWUP_IP: 
tv_w32!unloaded+8536 
19608536 ??    ??? 

FAILED_INSTRUCTION_ADDRESS: 
tv_w32!unloaded+8536 
19608536 ??    ??? 

WATSON_BKT_PROCSTAMP: 576c0d97 

WATSON_BKT_PROCVER: 1.5.16.0 

PROCESS_VER_PRODUCT: Myproc Name 

WATSON_BKT_MODULE: unknown 

WATSON_BKT_MODVER: 0.0.0.0 

WATSON_BKT_MODOFFSET: 19608536 

MODLIST_WITH_TSCHKSUM_HASH: 8b7920bcb3af2eb1b97366fd0663a3798ab285ea 

MODLIST_SHA1_HASH: b5acbaed45de37ad3c73ee4478c8f6678e94eaa6 

NTGLOBALFLAG: 0 

APPLICATION_VERIFIER_FLAGS: 0 

PRODUCT_TYPE: 1 

SUITE_MASK: 272 

DUMP_FLAGS: 3 

DUMP_TYPE: 0 

APP: Myproc.exe 

ANALYSIS_SESSION_HOST: DESKTOP-ABC 

ANALYSIS_SESSION_TIME: 07-08-2016 22:18:58.0444 

ANALYSIS_VERSION: 10.0.10586.567 x86fre 

IP_MODULE_UNLOADED: 
tv_w32!unloaded+8536 
19608536 ??    ??? 

THREAD_ATTRIBUTES: 
OS_LOCALE: DEU 

PROBLEM_CLASSES: 



BAD_INSTRUCTION_PTR 
    Tid [0x4a4] 
    Frame [0x00]: tv_w32!unloaded 



INVALID_POINTER_READ 
    Tid [0x4a4] 
    Frame [0x00]: tv_w32!unloaded 


BUGCHECK_STR: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ 

LAST_CONTROL_TRANSFER: from 00000000 to 19608536 

STACK_TEXT: 
0012ee38 00000000 19608648 ffff071b 00000000 <Unloaded_tv_w32.dll>+0x8536 


THREAD_SHA1_HASH_MOD_FUNC: 0959aaead905d5402017a9de12facac3929f71c3 

THREAD_SHA1_HASH_MOD_FUNC_OFFSET: 52f8c4ddebdd2e855f90e79f96f6fc29a470ad1d 

THREAD_SHA1_HASH_MOD: 2e69fc2d39893b6d7d9991dcc4967479dbafb5c5 

SYMBOL_STACK_INDEX: 0 

SYMBOL_NAME: tv_w32!unloaded+8536 

FOLLOWUP_NAME: MachineOwner 

MODULE_NAME: tv_w32 

IMAGE_NAME: tv_w32.dll 

DEBUG_FLR_IMAGE_TIMESTAMP: 573435d6 

STACK_COMMAND: .ecxr ; kb 

FAILURE_BUCKET_ID: BAD_INSTRUCTION_PTR_c0000005_tv_w32.dll!unloaded 

BUCKET_ID: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536 

PRIMARY_PROBLEM_CLASS: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_tv_w32!unloaded+8536 

BUCKET_ID_OFFSET: 8536 

BUCKET_ID_MODULE_STR: tv_w32 

BUCKET_ID_MODTIMEDATESTAMP: 573435d6 

BUCKET_ID_MODCHECKSUM: 45ff9 

BUCKET_ID_MODVER_STR: 0.0.0.0 

BUCKET_ID_PREFIX_STR: BAD_INSTRUCTION_PTR_INVALID_POINTER_READ_UNLOADED_IP_ 

FAILURE_PROBLEM_CLASS: BAD_INSTRUCTION_PTR 

FAILURE_EXCEPTION_CODE: c0000005 

FAILURE_IMAGE_NAME: tv_w32.dll 

FAILURE_FUNCTION_NAME: unloaded 

BUCKET_ID_FUNCTION_STR: unloaded 

FAILURE_SYMBOL_NAME: tv_w32.dll!unloaded 

TARGET_TIME: 2016-07-08T12:12:39.000Z 

OSBUILD: 2600 

OSSERVICEPACK: 6532 

SERVICEPACK_NUMBER: 6 

OS_REVISION: 0 

OSPLATFORM_TYPE: x86 

OSNAME: Windows XP 

OSEDITION: Windows XP WinNt (Service Pack 3) SingleUserTS 

USER_LCID: 0 

OSBUILD_TIMESTAMP: 2014-03-12 03:48:40 

ANALYSIS_SESSION_ELAPSED_TIME: e0a 

ANALYSIS_SOURCE: UM 

FAILURE_ID_HASH_STRING: um:bad_instruction_ptr_c0000005_tv_w32.dll!unloaded 

FAILURE_ID_HASH: {7c7c5a5b-462a-0301-1674-660f1336c576} 

Followup:  MachineOwner 
--------- 
+0

In der Funktion "AfxInternalPumpMessage" können Sie sehen, was die letzte Nachricht behandelt wurde? Haben Sie einen Handler für diese Nachricht? Was macht dieser Handler? Enthält die Handler-Funktion lokale Arrays, und Sie schreiben außerhalb der Grenzen davon? Da diese Art von Fehlern bei einem beschädigten Stack hauptsächlich auf das Schreiben von lokalen Variablen in einer oder mehreren Ihrer eigenen Funktionen zurückzuführen ist. Wenn der Code nicht zu groß ist, könnte es eine gute Idee sein, ihn jemand überprüfen zu lassen. Oder versuchen Sie zumindest, Debug-Logging und Tracing hinzuzufügen. –

+0

@JoachimPileborg: Danke. Ich habe meine ursprüngliche Frage aktualisiert. (Siehe Bearbeiten.) – c00000fd

+0

Sie erhalten die Quelle für den Message-Handler, da dies der erste Frame auf dem Stack ist, den der Debugger gefunden hat und dessen Quelle vorhanden ist. Der Inhalt des EDI-Registers ist, was auch immer sie an der Stelle des Absturzes sind, die bei 0x1963AB50 ist. Suchen Sie auf der Registerkarte "Module" nach, welche DLL unter dieser Adresse geladen ist. Enthält Ihre Version Build die Debug-Symbole? – 1201ProgramAlarm

Antwort

1

wollen Sie es einfach hier, um für wer sonst noch in dieser Ausgabe läuft. Nach mehreren Stunden durch die Crash-Dump-Datei zu graben, schließlich WinDbg konnte den Täter (lesen Sie meine Beiträge in der Frage selbst.)

Unterm Strich ist, dass unser Kunde wurde mit Teamviewer mit ihren Quick Connect Option, dass basically injects dritter lokalisieren -party UI-Elemente in laufende Programme. Dies führte in Kombination mit einem offensichtlichen Speicherleck (siehe mein OP oben und discussion of the use des Moduls xpsp2res.dll) zum Absturz.

Der eigentliche Absturz ist in aufgetreten, der entladen wurde, bevor der Speicherauszug erstellt wurde. Und da ich weder Quelldateien für TeamViewer noch irgendwie in Bezug auf unsere Software habe, kann ich an dieser Stelle nicht viel tun.

PS. Als Fazit, nachdem ich den Dump analysiert habe, rate ich dringend davon ab, TeamViewer als Remote-Desktop-Lösung einzusetzen. Es scheint sehr fehlerhaft zu sein und verursacht Speicherlecks.

+0

Ihre Analyse ist großartig. Ich habe heute einen ähnlichen Absturz (tv_x64.dll, genaue Version ist 12.0.83369) - und löste es durch Schließen von Teamviewer. Also hier ist * ein Fehler hier. - Allerdings muss ich sagen, dass "sehr buggy" zu sein scheint und "stark davon abraten" sind * so * übertrieben. Wir verwenden das Fernsehen seit Jahren und dies ist das erste bestätigte Problem, das ich damit habe. Es ist ein ausgezeichnetes Werkzeug, das uns jede Menge Zeit gespart hat. Also Bug: Ja. Aber immer noch ein gutes Werkzeug. –

+0

@MartinBa: [Ref1] (https://www.scmagazineuk.com/teamviewer-ha-potential-security-flaw-reddit-community-in-upheaval/article/531004/), [Ref2] (https: // arstechnica.com/information-technology/2016/06/teamviewer-users-are-being-hacked-in-bulk-and-we-still-dont-know-how/), [Ref3] (https: // arstechnica. com/information-technologie/2016/06/teamviewer-sagt-theres-no-evidence-von-2fa-umgehen-in-mass-account-hack /), [ref4] (https://www.theregister.co. uk/2016/06/06/teamviewer_sorry /). Nachdem ich ein wenig in den TeamViewer Code mit Debugger eingedrungen bin, stehe ich total zu meiner "buggy" & "unsicheren" Aussage. #SloppyCode – c00000fd

+0

Oh mein Gott. Eine Software weist eine Sicherheitslücke auf. Schockierend. (Oder vielleicht nicht. Was versucht, durch 1 Jahr alte Massenmedienberichte von dem gleichen Vorfall zu beweisen?) –