none
Crash in OLMapi32.dll (stack buffer overflow)

    Frage

  • Hallo

    Ich bin Programmentwickler und seit einem Update von Outlook  vom 21. April funktioniert stürzt unser Programm T4 ab. Wir verwenden die MAPI Schnittstelle und dadurch wird bei einer Outlook-Installation auch die Datei OLMAPI32.dll geladen die dann sofort abstürzt. Bedeutet der Code 0xc0000409 stack buffer overflow?

    Im Ereignisprotokoll entsteht der folgende Eintrag:

    Name der fehlerhaften Anwendung: T4_lokal.exe, Version: 4.17.2.240, Zeitstempel: 0x5897a398

    Name des fehlerhaften Moduls: olmapi32.dll, Version: 16.0.7967.6531, Zeitstempel: 0x58f7803c

    Ausnahmecode: 0xc0000409

    Fehleroffset: 0x0012c733

    ID des fehlerhaften Prozesses: 0x460

    Startzeit der fehlerhaften Anwendung: 0x01d2bcf6a3918fcb

    Pfad der fehlerhaften Anwendung: C:\T4\Prog\T4_lokal.exe

    Pfad des fehlerhaften Moduls: C:\Program Files (x86)\Microsoft Office\Root\Office16\olmapi32.dll

    Berichtskennung: acb67cad-c7b9-4e94-8c25-90141e1dcdcd

    Vollständiger Name des fehlerhaften Pakets:

    Anwendungs-ID, die relativ zum fehlerhaften Paket ist:

    Unser Programm ist unter Embarcadero Delphi XE3 entwickelt.

    Ich habe leider keinen Einfluss auf den Fehler, da ich die OLMAPI32.dll gar nicht explizit lade.

    Erst wenn ich komplett auf die Verwendung der MAPI-Schnittstelle verzichte läuft das Programm wieder.

    Was kann ich tun um das Problem zu lösen?

    Mit freundlichen Grüßen

    Oliver Wurdak

    zuletzt hier noch der Crash Report:

    Version=1
    EventType=BEX
    EventTime=131375106640996987
    ReportType=2
    Consent=1
    UploadTime=131375106641465655
    ReportIdentifier=e14d6c8b-28e9-11e7-ba5c-b8975ab1989c
    IntegratorReportIdentifier=acb67cad-c7b9-4e94-8c25-90141e1dcdcd
    WOW64=1
    NsAppName=T4_lokal.exe
    AppSessionGuid=00000460-0001-0032-cb8f-91a3f6bcd201
    TargetAppId=W:0006c2040a723785561127737fdbe25540d800000904!00008f78365f5095468bcad83257fde66b663de56c70!T4_lokal.exe
    TargetAppVer=2017//02//05:22:13:44!0!T4_lokal.exe
    BootId=4294967295
    Response.BucketId=dc2619b669f2b418fab298b94b562658
    Response.BucketTable=5
    Response.LegacyBucketId=116370955313
    Response.type=4
    Sig[0].Name=Anwendungsname
    Sig[0].Value=T4_lokal.exe
    Sig[1].Name=Anwendungsversion
    Sig[1].Value=4.17.2.240
    Sig[2].Name=Anwendungszeitstempel
    Sig[2].Value=5897a398
    Sig[3].Name=Fehlermodulname
    Sig[3].Value=olmapi32.dll
    Sig[4].Name=Fehlermodulversion
    Sig[4].Value=16.0.7967.6531
    Sig[5].Name=Fehlermodulzeitstempel
    Sig[5].Value=58f7803c
    Sig[6].Name=Ausnahmeoffset
    Sig[6].Value=0012c733
    Sig[7].Name=Ausnahmecode
    Sig[7].Value=c0000409
    Sig[8].Name=Ausnahmedaten
    Sig[8].Value=00000007
    DynamicSig[1].Name=Betriebsystemversion
    DynamicSig[1].Value=10.0.14393.2.0.0.256.48
    DynamicSig[2].Name=Gebietsschema-ID
    DynamicSig[2].Value=3079
    DynamicSig[22].Name=Zusatzinformation 1
    DynamicSig[22].Value=4913
    DynamicSig[23].Name=Zusatzinformation 2
    DynamicSig[23].Value=4913f8deb262014bd949ec4131e3f3ac
    DynamicSig[24].Name=Zusatzinformation 3
    DynamicSig[24].Value=6ecf
    DynamicSig[25].Name=Zusatzinformation 4
    DynamicSig[25].Value=6ecf6227c6507139394b80e4e4fb8018
    UI[2]=C:\T4\Prog\T4_lokal.exe
    UI[3]=T4_lokal.exe funktioniert nicht mehr
    UI[4]=Windows kann online nach einer Lösung für das Problem suchen.
    UI[5]=Online nach einer Lösung suchen und das Programm schließen
    UI[6]=Später online nach einer Lösung suchen und das Programm schließen
    UI[7]=Programm schließen
    LoadedModule[0]=C:\T4\Prog\T4_lokal.exe
    LoadedModule[1]=C:\WINDOWS\SYSTEM32\ntdll.dll
    LoadedModule[2]=C:\WINDOWS\System32\KERNEL32.DLL
    LoadedModule[3]=C:\WINDOWS\System32\KERNELBASE.dll
    LoadedModule[4]=C:\WINDOWS\System32\advapi32.dll
    LoadedModule[5]=C:\WINDOWS\System32\msvcrt.dll
    LoadedModule[6]=C:\WINDOWS\System32\sechost.dll
    LoadedModule[7]=C:\WINDOWS\System32\RPCRT4.dll
    LoadedModule[8]=C:\WINDOWS\System32\SspiCli.dll
    LoadedModule[9]=C:\WINDOWS\System32\CRYPTBASE.dll
    LoadedModule[10]=C:\WINDOWS\System32\bcryptPrimitives.dll
    LoadedModule[11]=C:\WINDOWS\System32\comdlg32.dll
    LoadedModule[12]=C:\WINDOWS\System32\combase.dll
    LoadedModule[13]=C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.14393.953_none_89c2555adb023171\comctl32.dll
    LoadedModule[14]=C:\WINDOWS\System32\ucrtbase.dll
    LoadedModule[15]=C:\WINDOWS\System32\GDI32.dll
    LoadedModule[16]=C:\WINDOWS\System32\gdi32full.dll
    LoadedModule[17]=C:\WINDOWS\System32\shcore.dll
    LoadedModule[18]=C:\WINDOWS\System32\USER32.dll
    LoadedModule[19]=C:\WINDOWS\System32\SHLWAPI.dll
    LoadedModule[20]=C:\WINDOWS\System32\win32u.dll
    LoadedModule[21]=C:\WINDOWS\System32\SHELL32.dll
    LoadedModule[22]=C:\WINDOWS\System32\cfgmgr32.dll
    LoadedModule[23]=C:\WINDOWS\System32\windows.storage.dll
    LoadedModule[24]=C:\WINDOWS\System32\powrprof.dll
    LoadedModule[25]=C:\WINDOWS\System32\kernel.appcore.dll
    LoadedModule[26]=C:\WINDOWS\System32\profapi.dll
    LoadedModule[27]=C:\WINDOWS\System32\ole32.dll
    LoadedModule[28]=C:\WINDOWS\System32\oleaut32.dll
    LoadedModule[29]=C:\WINDOWS\SYSTEM32\FONTSUB.dll
    LoadedModule[30]=C:\WINDOWS\System32\msvcp_win.dll
    LoadedModule[31]=C:\WINDOWS\SYSTEM32\SHFolder.dll
    LoadedModule[32]=C:\WINDOWS\SYSTEM32\TAPI32.DLL
    LoadedModule[33]=C:\WINDOWS\SYSTEM32\usp10.dll
    LoadedModule[34]=C:\WINDOWS\SYSTEM32\version.dll
    LoadedModule[35]=C:\WINDOWS\SYSTEM32\winmm.dll
    LoadedModule[36]=C:\WINDOWS\SYSTEM32\wininet.dll
    LoadedModule[37]=C:\WINDOWS\SYSTEM32\winspool.drv
    LoadedModule[38]=C:\WINDOWS\SYSTEM32\wsock32.dll
    LoadedModule[39]=C:\WINDOWS\System32\WS2_32.dll
    LoadedModule[40]=C:\WINDOWS\SYSTEM32\WINMMBASE.dll
    LoadedModule[41]=C:\WINDOWS\SYSTEM32\bcrypt.dll
    LoadedModule[42]=C:\WINDOWS\System32\IMM32.DLL
    LoadedModule[43]=C:\WINDOWS\system32\uxtheme.dll
    LoadedModule[44]=C:\WINDOWS\System32\MSCTF.dll
    LoadedModule[45]=C:\WINDOWS\system32\dwmapi.dll
    LoadedModule[46]=C:\WINDOWS\SYSTEM32\wtsapi32.dll
    LoadedModule[47]=C:\WINDOWS\SYSTEM32\WINSTA.dll
    LoadedModule[48]=C:\WINDOWS\SYSTEM32\netapi32.dll
    LoadedModule[49]=C:\WINDOWS\SYSTEM32\NETUTILS.DLL
    LoadedModule[50]=C:\WINDOWS\SYSTEM32\olepro32.dll
    LoadedModule[51]=C:\WINDOWS\System32\clbcatq.dll
    LoadedModule[52]=C:\Program Files (x86)\Microsoft Office\Root\Office16\olmapi32.dll
    LoadedModule[53]=C:\WINDOWS\SYSTEM32\VCRUNTIME140.dll
    LoadedModule[54]=C:\WINDOWS\SYSTEM32\wevtapi.dll
    LoadedModule[55]=C:\WINDOWS\SYSTEM32\MSVCP140.dll
    LoadedModule[56]=C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.14393.953_none_baad48403594ab3f\gdiplus.dll
    State[0].Key=Transport.DoneStage1
    State[0].Value=1
    FriendlyEventName=Nicht mehr funktionsfähig
    ConsentKey=BEX
    AppName=T4_lokal.exe
    AppPath=C:\T4\Prog\T4_lokal.exe
    NsPartner=windows
    NsGroup=windows8
    ApplicationIdentity=9586098547A6D59ECE8239A58E8555D0
    MetadataHash=-82631260

    Mittwoch, 10. Mai 2017 21:30

Alle Antworten

  • Erklärung findest du hier:
    https://en.wikipedia.org/wiki/Stack_buffer_overflow

    Ursache ist häufig ein geändertes Interface (Parameterstrukturen) von einer zur anderen Version.
    In den Windows-API gibt es deshalb häufig eine Längen- und/oder Versions-Info am Anfang einer Struktur.

    Um den Fehler einzukreisen musst du den Callstack prüfen, damit du weißt, welche Funktion inkompatibel ist.

    Donnerstag, 11. Mai 2017 07:45
  • Danke für die Tipps. Ich bin leider trotzdem noch nicht weitergekommen. Ich konnte den Fehler noch nicht auf einem meiner Entwicklungsrechner reproduzieren.

    Das Problem ist ja auch dass der Fehler schon beim Programmstart auftritt. Es wird da noch keine MAPI-Funktion aufgerufen. Wahrscheinlich passiert der Fehler bei einer automatischen Initialisierung. Ich kann mir nicht vorstellen, dass sich da das Interface geändert hat.

    Es müssen doch alle spezifischen MAPI-DLLs (Outlook, Mozilla ,..) die gleichen Interfaces anbieten.

    So ganz durchschaut hab ich das MAPI System auch noch nicht. Ich dachte es werden die Mapi-Prozedur- Aufrufe immer an die mapi32.dll geschickt und die ruft dann die spezifischen Mapi-DLLs z.B. olmapi32.dll auf.

    Welchen Part hat die msmapi32.dll ? Es wird anscheinend auch die Prozedur FGetComponentPath aufgerufen um in der Registry HKLM\ SOFTWARE\Clients\Mail den Pfad der spezifischen MAPI-dll DLLPathEx abzufragen. Wird dann diese DLL explizit gelinkt? 

    Ich weiß auch nicht wie ich auf diese Dinge überhaupt einen Einfluss aus meiner Entwicklungsumgebung heraus habe.



    Donnerstag, 18. Mai 2017 09:13
  • Es ist zugegebener Maßen schwierig.
    Aber leider befinden wir uns da wie üblich in der DLL-Hölle.

    Beim Laden einer DLL werden alle DLL's mit geladen, deren Funktionen durch statische Bindung benötigt werden. Da habe ich es schon erlebt, dass von einer Windowsversion zur anderen die Funktion in eine andere DLL verschoben wurde. Dadurch wird die DLL dann allerdings nicht geladen und es gäbe ggf. andere Fehler.

    Daher war ich dann gezwungen, die Funktionsadresse zur Laufzeit in A.DLL oder B.DLL zu suchen.

    Helfen kann dir hierbei ggf. der "DependencyWalker". Diesen rufst du mit deiner DLL/deinem Programm auf und es werden alle benötigten Funktionen/DLL's aufgelistet und fehlende Funktionen rot markiert.

    Sollte allerdings in den beteiligten DLL's ein Funktionsaufruf bereits mit einem Funktionspointer durchgeführt werden, so ist es denkbar, dass hier der Init des Pointers fehlgeschlagen ist.

    Montag, 22. Mai 2017 15:39