Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

mgrzeg.net - Admin on Rails :)

Nie znaleziono punktu wejścia procedury _except_handler4_common w bibliotece msvcrt.dll

Uwaga: Jeśli nie jesteś w stanie samodzielnie rozwiązać poniższego problemu, a podane wskazówki nijak Ci nie pomagają, to zajrzyj na to forum i utwórz nowy wątek podając informacje zgodnie z tym opisem.

Dziś dwa słowa o ładowaniu bibliotek. A dokładniej - o dosyć wrednym problemie z tym związanym.

Rys1. Błąd "Nie znaleziono punktu wejścia procedury _except_handler4_common w bibliotece msvcrt.dll"

Bez większego wstępu przechodzimy od razu do sedna.

Przypadek 1: Statyczne dowiązanie.

Jako przykład weżmiemy RME 2.2, który po zainstalowaniu i uruchomieniu wita nas wspomnianym wcześniej komunikatem. Problem jest jednak na tyle ogólny, że opisaną w dalszej części metodę można z powodzeniem zastosować w innych tego typu przypadkach.

Mając ciągle wiszący komunikat błędu, uruchamiamy Process Hacker, przechodzimy do zakładki ‘Modules’ dla procesu RME.exe i zaczynamy przyglądać się modułom.

Rys2. Lista modułów załadowanych przez RME.exe

Ponieważ problem dotyczy biblioteki msvcrt.dll, to zaczynamy od sprawdzenia, czy faktycznie w załadowanej do pamięci procesu bibliotece msvcrt.dll nie ma wspomnianego eksportu:

Rys3. Lista eksportów msvcrt.dll

OK, wygląda na to, że faktycznie nie ma takiej funkcji eksportowanej w tej bibliotece. Przejrzyjmy zatem pozostałe biblioteki (nie ma ich wiele) i sprawdźmy, która z nich importuje nieszczęsną funkcję. Po kilku kliknięciach trafiamy na bibliotekę WSOCK32.dll

Rys4. Lista importów wsock32.dll

i wygląda na to, że mamy winowajcę. Okazuje się bowiem, że twórca aplikacji ‘omyłkowo’ dorzucił do katalogu aplikacji bibliotekę wsock32.dll ze swojego systemu (Windows 7 x86), która załadowana przy starcie aplikacji na Windows XP zgłasza tytułowy błąd.
Jako dodatkową wskazówkę możemy użyć Dependency Walkera, gdy załadujemy RME.exe do depends, to znajdziemy np. coś takiego:

***************************| Module Dependency Tree |***************************
*                                                                              *
* Legend: F  Forwarded Module   ?  Missing Module        6  64-bit Module      *
*         D  Delay Load Module  !  Invalid Module                              *
*         *  Dynamic Module     E  Import/Export Mismatch or Load Failure      *
*                               ^  Duplicate Module                            *
*                                                                              *
********************************************************************************

[   ] c:\rme\RME.EXE
     [   ] c:\rme\LIBXML2.DLL
          [ ^ ] c:\rme\WSOCK32.DLL
               [F^ ] c:\windows\system32\WS2_32.DLL
          [   ] c:\rme\ICONV.DLL
               [ ^ ] c:\windows\system32\MSVCRT.DLL
               [ ^ ] c:\windows\system32\KERNEL32.DLL
          [   ] c:\rme\ZLIB1.DLL
               [ ^ ] c:\windows\system32\KERNEL32.DLL
               [ ^ ] c:\windows\system32\MSVCRT.DLL
               [ ^ ] c:\windows\system32\MSVCRT.DLL
          [ ^ ] c:\windows\system32\KERNEL32.DLL
               [F^ ] c:\windows\system32\NTDLL.DLL
          [   ] c:\windows\system32\MSVCRT.DLL
               [ ^ ] c:\windows\system32\KERNEL32.DLL
                    [F^ ] c:\windows\system32\NTDLL.DLL
               [ ^ ] c:\windows\system32\NTDLL.DLL
     [   ] c:\rme\ARCHIVE.DLL
          [ ^ ] c:\windows\system32\KERNEL32.DLL
               [F^ ] c:\windows\system32\NTDLL.DLL
          [ ^ ] c:\windows\system32\USER32.DLL
          [ ^ ] c:\windows\system32\ADVAPI32.DLL
          [ ^ ] c:\rme\ZLIB1.DLL
          [ ^ ] c:\rme\ICONV.DLL
          [ ^ ] c:\rme\LIBXML2.DLL
          [ ^ ] c:\rme\MSVCR100.DLL
     [   ] c:\windows\system32\KERNEL32.DLL
          [ ^ ] c:\windows\system32\NTDLL.DLL
          [F^ ] c:\windows\system32\NTDLL.DLL
     [   ] c:\windows\system32\RPCRT4.DLL
          [ ^ ] c:\windows\system32\ADVAPI32.DLL
          [ ^ ] c:\windows\system32\KERNEL32.DLL
               [F^ ] c:\windows\system32\NTDLL.DLL
          [ ^ ] c:\windows\system32\NTDLL.DLL
          [ ^ ] c:\windows\system32\SECUR32.DLL
     [   ] c:\rme\WSOCK32.DLL
          [   ] c:\windows\system32\WS2_32.DLL
               [ ^ ] c:\windows\system32\ADVAPI32.DLL
               [ ^ ] c:\windows\system32\KERNEL32.DLL
                    [F^ ] c:\windows\system32\NTDLL.DLL
               [ ^ ] c:\windows\system32\MSVCRT.DLL
               [   ] c:\windows\system32\NTDLL.DLL
               [   ] c:\windows\system32\WS2HELP.DLL
                    [ ^ ] c:\windows\system32\ADVAPI32.DLL
                    [ ^ ] c:\windows\system32\KERNEL32.DLL
                         [F^ ] c:\windows\system32\NTDLL.DLL
                    [ ^ ] c:\windows\system32\NTDLL.DLL
                    [D^ ] c:\windows\system32\USER32.DLL
               [D^ ] c:\windows\system32\USER32.DLL
          [ E ] c:\windows\system32\MSVCRT.DLL
          [ ^ ] c:\windows\system32\KERNEL32.DLL
               [F^ ] c:\windows\system32\NTDLL.DLL
          [F^ ] c:\windows\system32\WS2_32.DLL

Co wskaże na problemy z powiązaniem rme.exe -> wsock32.dll -> msvcrt.dll

Zobaczmy teraz, jak powyższy błąd przedstawi nam się w zrzucie pamięci załadowanym w WinDbg.
Zaczynamy od klasycznego !analyze -v

0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


FAULTING_IP:
+0
00000000 ??              ???

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD:  00000538

DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT

PROCESS_NAME:  RME.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {WYJ

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - Co najmniej jeden z argument w jest nieprawid owy.

NTGLOBALFLAG:  20000

APPLICATION_VERIFIER_FLAGS:  0

APP:  rme.exe

PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT

BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT

LAST_CONTROL_TRANSFER:  from 7c90d9ac to 7c90e4f4

STACK_TEXT: 
0012f334 7c90d9ac 7c940046 c0000139 00000002 ntdll!KiFastSystemCallRet
0012f338 7c940046 c0000139 00000002 00000003 ntdll!ZwRaiseHardError+0xc
0012f38c 7c91cfbc 77c00000 3fd13a3a 00d139cc ntdll!LdrpSnapThunk+0x36b
0012f410 7c91e57d 00252548 00252268 3fd13954 ntdll!LdrpSnapIAT+0x20e
0012f450 7c91e474 7ffde000 00020498 01252268 ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
0012f470 7c91e5ae 7ffde000 00020498 00252268 ntdll!LdrpHandleNewFormatImportDescriptors+0x20
0012f4ec 7c91d7c6 00020498 00252268 100db7dc ntdll!LdrpWalkImportDescriptor+0x19e
0012f73c 7c91d2cd 00020498 100db9f0 10000000 ntdll!LdrpLoadImportModule+0x1c8
0012f76c 7c91d274 7ffde000 00020498 00252138 ntdll!LdrpHandleOneOldFormatImportDescriptor+0x5e
0012f784 7c91c1ce 7ffde000 00020498 00252138 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f
0012f800 7c91d7c6 00020498 00252138 00851c8c ntdll!LdrpWalkImportDescriptor+0x19e
0012fa50 7c91d2cd 00020498 00852b5e 00400000 ntdll!LdrpLoadImportModule+0x1c8
0012fa80 7c91d274 7ffde000 00020498 00251ec0 ntdll!LdrpHandleOneOldFormatImportDescriptor+0x5e
0012fa98 7c91c1ce 7ffde000 00020498 00251ec0 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f
0012fb14 7c921e25 00020498 00251ec0 7ffdd000 ntdll!LdrpWalkImportDescriptor+0x19e
0012fc94 7c92108f 0012fd30 7c900000 0012fce0 ntdll!LdrpInitializeProcess+0xe02
0012fd1c 7c90e437 0012fd30 7c900000 00000000 ntdll!_LdrpInitialize+0x183
00000000 00000000 00000000 00000000 00000000 ntdll!KiUserApcDispatcher+0x7


FOLLOWUP_IP:
ntdll!KiFastSystemCallRet+0
7c90e4f4 c3              ret

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  ntdll!KiFastSystemCallRet+12f334

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: ntdll

IMAGE_NAME:  ntdll.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  48039211

STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s; .ecxr ; kb

FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_ntdll.dll!KiFastSystemCallRet

BUCKET_ID:  APPLICATION_FAULT_STATUS_BREAKPOINT_ntdll!KiFastSystemCallRet+12f334

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/RME_exe/0_0_0_0/4ffebbf3/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner
---------

Zgłoszony wyjątek nie mówi nam za wiele. Skupmy się zatem na stosie wywołań.

0:000> kbn
 # ChildEBP RetAddr  Args to Child             
00 0012f334 7c90d9ac 7c940046 c0000139 00000002 ntdll!KiFastSystemCallRet
01 0012f338 7c940046 c0000139 00000002 00000003 ntdll!ZwRaiseHardError+0xc
02 0012f38c 7c91cfbc 77c00000 3fd13a3a 00d139cc ntdll!LdrpSnapThunk+0x36b
03 0012f410 7c91e57d 00252548 00252268 3fd13954 ntdll!LdrpSnapIAT+0x20e
04 0012f450 7c91e474 7ffde000 00020498 01252268 ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
05 0012f470 7c91e5ae 7ffde000 00020498 00252268 ntdll!LdrpHandleNewFormatImportDescriptors+0x20
06 0012f4ec 7c91d7c6 00020498 00252268 100db7dc ntdll!LdrpWalkImportDescriptor+0x19e
07 0012f73c 7c91d2cd 00020498 100db9f0 10000000 ntdll!LdrpLoadImportModule+0x1c8
08 0012f76c 7c91d274 7ffde000 00020498 00252138 ntdll!LdrpHandleOneOldFormatImportDescriptor+0x5e
09 0012f784 7c91c1ce 7ffde000 00020498 00252138 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f
0a 0012f800 7c91d7c6 00020498 00252138 00851c8c ntdll!LdrpWalkImportDescriptor+0x19e
0b 0012fa50 7c91d2cd 00020498 00852b5e 00400000 ntdll!LdrpLoadImportModule+0x1c8
0c 0012fa80 7c91d274 7ffde000 00020498 00251ec0 ntdll!LdrpHandleOneOldFormatImportDescriptor+0x5e
0d 0012fa98 7c91c1ce 7ffde000 00020498 00251ec0 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f
0e 0012fb14 7c921e25 00020498 00251ec0 7ffdd000 ntdll!LdrpWalkImportDescriptor+0x19e
0f 0012fc94 7c92108f 0012fd30 7c900000 0012fce0 ntdll!LdrpInitializeProcess+0xe02
10 0012fd1c 7c90e437 0012fd30 7c900000 00000000 ntdll!_LdrpInitialize+0x183
11 00000000 00000000 00000000 00000000 00000000 ntdll!KiUserApcDispatcher+0x7

W ramce 03 widzimy wywołanie ntdll!LdrpSnapIAT, co podpowiada nam odniesienie do tablicy importów (Import Address Table - IAT), a przyglądając się bliżej parametrom przekazanym do ntdll!LdrpSnapThunk (ramka 02):

0:000> !address 77c00000
Usage:                  Image
Base Address:           77c00000
End Address:            77c01000
Region Size:            00001000
State:                  <info not present at the target>
Protect:                <info not present at the target>
Type:                   <info not present at the target>
Allocation Base:        <info not present at the target>
Allocation Protect:     <info not present at the target>
Image Path:             C:\WINDOWS\system32\msvcrt.dll
Module Name:            msvcrt
Loaded Image Name:      msvcrt.dll
Mapped Image Name:     
More info:              lmv m msvcrt
More info:              !lmi msvcrt
More info:              ln 0x77c00000
More info:              !dh 0x77c00000
0:000> da 3fd13a3a
3fd13a3a  "_except_handler4_common"

już nie mamy wątpliwości, że chodzi o załadowaną bibliotekę msvcrt.dll i eksport _except_handler4_common

Gdy przyjrzymy się parametrom w ramach ramki 07:
07 0012f73c 7c91d2cd 00020498 100db9f0 10000000 ntdll!LdrpLoadImportModule+0x1c8

0:000> da 100db9f0
100db9f0  "WSOCK32.dll"

oraz nieco niżej na stosie ramki 0b:
0b 0012fa50 7c91d2cd 00020498 00852b5e 00400000 ntdll!LdrpLoadImportModule+0x1c8

0:000> da 00852b5e
00852b5e  "libxml2.dll"

to widzimy, że loader załadował najpierw bibliotekę libxml2.dll, po czym - na podstawie tablicy importów - kolejną wsock32.dll, aby w końcu próbować znaleźć tytułowe dowiązanie w załadowanej już bibliotece msvcrt.dll i na tym polec.

Gdy spojrzymy na stos w poszukiwaniu symboli:

0:000> dps @esp @esp+100
0012f338  7c90d9ac ntdll!ZwRaiseHardError+0xc
0012f33c  7c940046 ntdll!LdrpSnapThunk+0x36b
0012f340  c0000139
0012f344  00000002
0012f348  00000003
0012f34c  0012f364
0012f350  00000001
0012f354  0012f3ac
0012f358  3fd139cc WSOCK32!$$VProc_ImageExportDirectory+0x1dec
0012f35c  00252268
0012f360  3fd139a0 WSOCK32!$$VProc_ImageExportDirectory+0x1dc0
0012f364  0012f380
0012f368  0012f378
0012f36c  3fd10000 WSOCK32!_imp__InterlockedExchange <PERF> (WSOCK32+0x0)
0012f370  00180017
0012f374  3fd13a3a WSOCK32!_NULL_IMPORT_DESCRIPTOR+0xe8
0012f378  00160014
0012f37c  00153318
0012f380  0030002e
0012f384  00153338
0012f388  00000159
0012f38c  0012f410
0012f390  7c91cfbc ntdll!LdrpSnapIAT+0x20e
0012f394  77c00000 msvcrt!_imp__MultiByteToWideChar <PERF> (msvcrt+0x0)
0012f398  3fd13a3a WSOCK32!_NULL_IMPORT_DESCRIPTOR+0xe8
0012f39c  00d139cc
0012f3a0  3fd11014 WSOCK32!_imp___except_handler4_common
0012f3a4  3fd13a3a WSOCK32!_NULL_IMPORT_DESCRIPTOR+0xe8
0012f3a8  00004326
0012f3ac  00000001
0012f3b0  3fd139a0 WSOCK32!$$VProc_ImageExportDirectory+0x1dc0
0012f3b4  3fd139a0 WSOCK32!$$VProc_ImageExportDirectory+0x1dc0
0012f3b8  00252268
0012f3bc  3fd13954 WSOCK32!$$VProc_ImageExportDirectory+0x1d74
0012f3c0  00000000
0012f3c4  3fd15000 WSOCK32!__dyn_tls_init_callback+0x988
0012f3c8  00000001
0012f3cc  77c48a10 msvcrt!_NULL_IMPORT_DESCRIPTOR+0xde0
0012f3d0  3fd139cc WSOCK32!$$VProc_ImageExportDirectory+0x1dec
0012f3d4  3fd139a0 WSOCK32!$$VProc_ImageExportDirectory+0x1dc0
0012f3d8  3fd102ab WSOCK32!_imp__InterlockedExchange <PERF> (WSOCK32+0x2ab)
0012f3dc  00001000
0012f3e0  00000020
0012f3e4  3fd11014 WSOCK32!_imp___except_handler4_common
0012f3e8  00004326
0012f3ec  00000068
0012f3f0  00000000
0012f3f4  3fd11000 WSOCK32!_imp__WSARecv
0012f3f8  0012f3b4
0012f3fc  00000001
0012f400  0012f4dc
0012f404  7c90e900 ntdll!_except_handler3
0012f408  7c91d008 ntdll!`string'+0x7c
0012f40c  00000001
0012f410  0012f450
0012f414  7c91e57d ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
0012f418  00252548
0012f41c  00252268
0012f420  3fd13954 WSOCK32!$$VProc_ImageExportDirectory+0x1d74
0012f424  00000000
0012f428  00000001
0012f42c  3fd10280 WSOCK32!_imp__InterlockedExchange <PERF> (WSOCK32+0x280)
0012f430  7ffde000
0012f434  00000050
0012f438  3fd102ab WSOCK32!_imp__InterlockedExchange <PERF> (WSOCK32+0x2ab)

to okazuje się, że mamy interesujący:

0012f3e4  3fd11014 WSOCK32!_imp___except_handler4_common

Przypadek 2 - linkowanie dynamiczne

Poprzedni przypadek był zlokalizowany do katalogu aplikacji i proste usunięcie zbędnych bibliotek (wsock32.dll i innych wziętych z systemu twórcy) rozwiązywało problem, nie powodując przy tym komplikacji w przypadku innych programów. Czasem jednak jeden nadgorliwy instalator wrzuca jakieś moduły do katalogów współdzielonych i wówczas wszystkie aplikacje są narażone na problemy. Tak jest w przypadku kolejnej aplikacji, która po uruchomieniu zgłasza błąd z Rys1., jednak przeglądanie programu z użyciem Dependency Walkera nic nam nie da, bowiem aplikacja korzysta z ręcznego ładowania (LoadLibrary, GetProcAddress - ale nie jako opcja /delayload linkera!).
Tym razem mamy do dyspozycji jedynie dump aplikacji, pochodzący również z Windows XP, zajrzyjmy zatem do środka.
Zaczynamy oczywiście od !analyze -v

0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


FAULTING_IP:
+0
00000000 ??              ???

EXCEPTION_RECORD:  ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD:  00000568

DEFAULT_BUCKET_ID:  STATUS_BREAKPOINT

PROCESS_NAME:  worldoftanks.exe

ERROR_CODE: (NTSTATUS) 0x80000003 - {WYJ

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - Co najmniej jeden z argument w jest nieprawid owy.

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

APP:  worldoftanks.exe

PRIMARY_PROBLEM_CLASS:  STATUS_BREAKPOINT

BUGCHECK_STR:  APPLICATION_FAULT_STATUS_BREAKPOINT

LAST_CONTROL_TRANSFER:  from 7c90d9ca to 7c90e514

STACK_TEXT: 
0012dfa0 7c90d9ca 7c941d26 c0000139 00000002 ntdll!KiFastSystemCallRet
0012dfa4 7c941d26 c0000139 00000002 00000003 ntdll!ZwRaiseHardError+0xc
0012dff8 7c91c0bc 77c00000 153415bc 00341284 ntdll!LdrpSnapThunk+0x36b
0012e07c 7c9247a4 00262590 00264bf8 15341158 ntdll!LdrpSnapIAT+0x20e
0012e0bc 7c92469b 7ffd4000 001a8080 01264bf8 ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
0012e0dc 7c9247d5 7ffd4000 001a8080 00264bf8 ntdll!LdrpHandleNewFormatImportDescriptors+0x20
0012e158 7c916227 001a8080 00264bf8 c0150008 ntdll!LdrpWalkImportDescriptor+0x19e
0012e408 7c91643d 00000000 001a8080 0012e72c ntdll!LdrpLoadDll+0x24e
0012e6b0 64d07cb0 001a8080 0012e72c 0012e6d8 ntdll!LdrLoadDll+0x230
WARNING: Stack unwind information not available. Following frames may be wrong.
0012e6e0 7c801bbd 001a8080 0012e72c 0012e70c snxhk+0x7cb0
0012e748 7c80aefc 00f38c14 00000000 00000000 kernel32!LoadLibraryExW+0x18e
0012e75c 006d32cc 00f38c14 0019f360 052ba1e0 kernel32!LoadLibraryW+0x11
0012e938 006d4415 00906d24 50087b94 052ba330 worldoftanks+0x2d32cc
00000000 00000000 00000000 00000000 00000000 worldoftanks+0x2d4415


STACK_COMMAND:  ~0s; .ecxr ; kb

FOLLOWUP_IP:
snxhk+7cb0
64d07cb0 8bd8            mov     ebx,eax

SYMBOL_STACK_INDEX:  9

SYMBOL_NAME:  snxhk+7cb0

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: snxhk

IMAGE_NAME:  snxhk.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  4ed3ca80

FAILURE_BUCKET_ID:  STATUS_BREAKPOINT_80000003_snxhk.dll!Unknown

BUCKET_ID:  APPLICATION_FAULT_STATUS_BREAKPOINT_snxhk+7cb0

WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/worldoftanks_exe/0_8_0_0/505b52ff/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner
---------

Wyjątek jest identyczny z tym opisanym poprzednio i znów nie mówi nam za dużo. Dodatkowo wskazanie na hook Avasta kieruje nas nieco na manowce - to nie AV jest tu winien. No cóż - zaglądamy zatem ponownie do stosu wywołań:

0:000> kbn
 # ChildEBP RetAddr  Args to Child             
00 0012dfa0 7c90d9ca 7c941d26 c0000139 00000002 ntdll!KiFastSystemCallRet
01 0012dfa4 7c941d26 c0000139 00000002 00000003 ntdll!ZwRaiseHardError+0xc
02 0012dff8 7c91c0bc 77c00000 153415bc 00341284 ntdll!LdrpSnapThunk+0x36b
03 0012e07c 7c9247a4 00262590 00264bf8 15341158 ntdll!LdrpSnapIAT+0x20e
04 0012e0bc 7c92469b 7ffd4000 001a8080 01264bf8 ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
05 0012e0dc 7c9247d5 7ffd4000 001a8080 00264bf8 ntdll!LdrpHandleNewFormatImportDescriptors+0x20
06 0012e158 7c916227 001a8080 00264bf8 c0150008 ntdll!LdrpWalkImportDescriptor+0x19e
07 0012e408 7c91643d 00000000 001a8080 0012e72c ntdll!LdrpLoadDll+0x24e
08 0012e6b0 64d07cb0 001a8080 0012e72c 0012e6d8 ntdll!LdrLoadDll+0x230
WARNING: Stack unwind information not available. Following frames may be wrong.
09 0012e6e0 7c801bbd 001a8080 0012e72c 0012e70c snxhk+0x7cb0
0a 0012e748 7c80aefc 00f38c14 00000000 00000000 kernel32!LoadLibraryExW+0x18e
0b 0012e75c 006d32cc 00f38c14 0019f360 052ba1e0 kernel32!LoadLibraryW+0x11
0c 0012e938 006d4415 00906d24 50087b94 052ba330 worldoftanks+0x2d32cc
0d 00000000 00000000 00000000 00000000 00000000 worldoftanks+0x2d4415

Mając w pamięci poprzedni przykład, sięgamy do ramki 02 i sprawdzamy parametry funkcji:
02 0012dff8 7c91c0bc 77c00000 153415bc 00341284 ntdll!LdrpSnapThunk+0x36b


0:000> !address 77c00000
Usage:                  Image
Base Address:           77c00000
End Address:            77c01000
Region Size:            00001000
State:                  <info not present at the target>
Protect:                <info not present at the target>
Type:                   <info not present at the target>
Allocation Base:        <info not present at the target>
Allocation Protect:     <info not present at the target>
Image Path:             C:\WINDOWS\system32\msvcrt.dll
Module Name:            msvcrt
Loaded Image Name:      msvcrt.dll
Mapped Image Name:     
More info:              lmv m msvcrt
More info:              !lmi msvcrt
More info:              ln 0x77c00000
More info:              !dh 0x77c00000

0:000> da 153415bc
153415bc  "_except_handler4_common"

A zatem tak - chodzi o tytułową funkcję w tytułowej bibliotece. Tu ścieżka wywołania jest jednak nieco inna, mamy bowiem ramkę 0b i parametr (LoadLibraryW w wersji ‘szerokiej’ ):
0b 0012e75c 006d32cc 00f38c14 0019f360 052ba1e0 kernel32!LoadLibraryW+0x11

0:000> du 00f38c14
00f38c14  "dxgi.dll"

Ha! Zatem mamy ładowaną bibliotekę dxgi.dll, która w swoich importach ma odwołanie do tytułowego eksportu. Szczegóły załadowanej biblioteki:

0:000> lmvm dxgi
start    end        module name
152d0000 15353000   dxgi       (pdb symbols)          c:\websymbols\dxgi.pdb\4A1CA5EC045640D3BA7D60DDEE0B2FBF2\dxgi.pdb
    Loaded symbol image file: dxgi.dll
    Image path: C:\WINDOWS\system32\dxgi.dll
    Image name: dxgi.dll
    Timestamp:        Tue Jul 14 03:06:20 2009 (4A5BDA0C)
    CheckSum:         00081E01
    ImageSize:        00083000
    File version:     6.1.7600.16385
    Product version:  6.1.7600.16385
    File flags:       0 (Mask 3F)
    File OS:          40004 NT Win32
    File type:        2.0 Dll
    File date:        00000000.00000000
    Translations:     0409.04b0
    CompanyName:      Microsoft Corporation
    ProductName:      Microsoft® Windows® Operating System
    InternalName:     dxgi.dll
    OriginalFilename: dxgi.dll
    ProductVersion:   6.1.7600.16385
    FileVersion:      6.1.7600.16385 (win7_rtm.090713-1255)
    FileDescription:  DirectX Graphics Infrastructure
    LegalCopyright:   © Microsoft Corporation. All rights reserved.

I wszystko jasne. Nie wiadomo skąd w Windows XP mamy w katalogu systemowym fragment DirectX 10 z kompilacji pod Windows 7. A aplikacja prawdopodobnie przy inicjalizacji robiła test w postaci próby załadowania komponentu

if(LoadLibrary(“dxgi.dll”){
// jest dx10
}
else //nie ma :(

który skończył się tak, jak się skończył. Jeszcze rzut oka na stos w poszukiwaniu symboli:

0:000> dps @esp @esp+100
0012dfa4  7c90d9ca ntdll!ZwRaiseHardError+0xc
0012dfa8  7c941d26 ntdll!LdrpSnapThunk+0x36b
0012dfac  c0000139
0012dfb0  00000002
0012dfb4  00000003
0012dfb8  0012dfd0
0012dfbc  00000001
0012dfc0  0012e018
0012dfc4  15341284 dxgi!_IMPORT_DESCRIPTOR_VERSION+0x4
0012dfc8  00264bf8
0012dfcc  15341268 dxgi!_IMPORT_DESCRIPTOR_ADVAPI32+0x10
0012dfd0  0012dfec
0012dfd4  0012dfe4
0012dfd8  152d0000 dxgi!_imp__InitializeSecurityDescriptor <PERF> (dxgi+0x0)
0012dfdc  00180017
0012dfe0  153415bc dxgi!_NULL_IMPORT_DESCRIPTOR+0x504
0012dfe4  00160014
0012dfe8  0019dc20
0012dfec  0030002e
0012dff0  001891b0
0012dff4  00000159
0012dff8  0012e07c
0012dffc  7c91c0bc ntdll!LdrpSnapIAT+0x20e
0012e000  77c00000 msvcrt!_imp__MultiByteToWideChar <PERF> (msvcrt+0x0)
0012e004  153415bc dxgi!_NULL_IMPORT_DESCRIPTOR+0x504
0012e008  00341284
0012e00c  152d1010 dxgi!_imp___except_handler4_common
0012e010  153415bc dxgi!_NULL_IMPORT_DESCRIPTOR+0x504
0012e014  00004326
0012e018  00000001
0012e01c  15341268 dxgi!_IMPORT_DESCRIPTOR_ADVAPI32+0x10
0012e020  15341268 dxgi!_IMPORT_DESCRIPTOR_ADVAPI32+0x10
0012e024  00264bf8
0012e028  15341158 dxgi!_CT??_R0J+0xfac
0012e02c  00000000
0012e030  1534d000 dxgi!__dyn_tls_init_callback <PERF> (dxgi+0x7d000)
0012e034  00000001
0012e038  77c48a10 msvcrt!_NULL_IMPORT_DESCRIPTOR+0xde0
0012e03c  15341284 dxgi!_IMPORT_DESCRIPTOR_VERSION+0x4
0012e040  15341268 dxgi!_IMPORT_DESCRIPTOR_ADVAPI32+0x10
0012e044  152d02d8 dxgi!_imp__InitializeSecurityDescriptor <PERF> (dxgi+0x2d8)
0012e048  00001000
0012e04c  00000020
0012e050  152d1010 dxgi!_imp___except_handler4_common
0012e054  00004326
0012e058  0000031c
0012e05c  00000000
0012e060  152d1000 dxgi!_imp___onexit
0012e064  0012e020
0012e068  00000001
0012e06c  0012e148
0012e070  7c90e920 ntdll!_except_handler3
0012e074  7c91c108 ntdll!`string'+0x7c
0012e078  00000001
0012e07c  0012e0bc
0012e080  7c9247a4 ntdll!LdrpHandleOneNewFormatImportDescriptor+0x25e
0012e084  00262590
0012e088  00264bf8
0012e08c  15341158 dxgi!_CT??_R0J+0xfac
0012e090  00000000
0012e094  00000001
0012e098  152d0288 dxgi!_imp__InitializeSecurityDescriptor <PERF> (dxgi+0x288)
0012e09c  7ffd4000
0012e0a0  000000b4
0012e0a4  152d02d8 dxgi!_imp__InitializeSecurityDescriptor <PERF> (dxgi+0x2d8)

i podobnie jak w poprzednim przypadku znajdujemy ciekawy:

0012e050 152d1010 dxgi!_imp___except_handler4_common

Także tym razem usunięcie zbędnej biblioteki rozwiązuje problem.

Opublikowane 1 października 2012 17:47 przez mgrzeg

Powiadamianie o komentarzach

Jeżeli chciałbyś otrzymywać email gdy ta wypowiedź zostanie zaktualizowana, to zarejestruj się tutaj

Subskrybuj komentarze za pomocą RSS

Komentarze:

 

Nie udało się :( said:

Jestem tu pierwszy raz i zauwarzyłem tą poradę.Mam ten sam problem tylko że z grą Assasin's Creed III.Niestety ten sposób to zamknięte koło ponieważ gdy usuwam bibliotekę,która "zabrała" tą funkcję wtedy gra nie uruchamia się z powodu jej braku.Czy jest na to jakiś sposób?

grudnia 3, 2012 18:30
 

mgrzeg said:

Hej, zajrzyj na forum supportowe gry na stronie producenta, lub jakieś inne, na którym rozwiązywane są tego typu problemy. Podejrzewam, że próbujesz uruchomić tę grę na XP, podczas gdy minimalne wymagania to Vista SP2 (zakładka 'wymagania systemowe' na stronie http://cs.ubi.com/pl-PL/product_detail.aspx?cid=tcm:63-63061&ctid=tcm:50-14994-32&pid=tcm:63-15291)

grudnia 3, 2012 19:17
 

mądrala said:

Przepraszam może jestem idiotą i nie umiem w tak inteligentny sposób naprawić tego błędu ale mam swój sposób, po prostu KASUJĘ PLIK WSOCK32.DLL i wszystko jest ok. DZIENKI ZA PRZECZYTANJE. amen.

grudnia 11, 2012 20:16
 

Rafał said:

Nirstety przeszukałem juz chyba cały internet ale moj przypadek jest troche inny. Mianowicie błąd siedzi w rundll32.exe. nie wiem jak się do tego dobrać ponadto nie działają mi niektóre programy, np instalka do firefoxa. mgrzeg, jak możesz to odblokuj mozliwość rejestracji, albo odezwij sie do mnie na rafalpodles@gmail.com. z góry dzieki.

grudnia 11, 2012 22:43
 

Elor said:

Wielkie dzięki, męczyłem się z tym ładny kawał czasu :D a wystarczyło usunąć 1 plik.

grudnia 25, 2012 14:47
 

Dawid said:

Jaki dokładnie plik / pliki mam usunąć bo nie ogarniam ? ;p

lutego 10, 2013 17:39
 

mgrzeg said:

@Dawid: Problem polega na tym, że bez przeprowadzenia powyższej analizy nie wiadomo jakie pliki trzeba usunąć. Każdy przypadek jest inny, więc najlepiej będzie, jak poszukasz pomocy na forach technicznych - np. na fixitpc.pl.

lutego 11, 2013 15:12
 

xmaciekzx said:

mam problem z grą Sniper Elite V2. Zrobiłem wszystko co w instrukcji i wyszło że plik d3d11.dll . Kiedy usunąłem plik pokazało się że nie mogę jej uruchomić ze względu na na jego brak. Mam Windows XP. Proszę o pomoc

kwietnia 15, 2013 16:18
 

mgrzeg said:

@xmaciekzx: Sniper Elite V2 wymaga Visty, lub nowszego systemu.

kwietnia 16, 2013 17:36
 

nfs 13 said:

niestety gdy chcę włączyć grę nfs mw 2012 to wyskakuje mi ten błąd z biblioteki msvcr.dll i nie wiem jak to naprawić ;d

czerwca 28, 2013 20:43
 

Simi said:

mgrzeg

pomoz mi. niewiem jak zrobic tom analize

lipca 27, 2013 10:10
 

NIE MA NIC said:

NIE DZIAŁA :__:

maja 25, 2014 14:06
 

gnaw said:

Jesteś wielki! Męczyłem się z tym od kilku miesięcy a teraz po 5 minutach od wejścia na tę stronę problemu nie ma :-) U mnie komunikat pojawiał się głównie przy włączeniu DTlite czy MPClassic ale też javy nie mogłem zaktualizować od dawna. Pobrałem ten processhacker-2.33-bin.zip uruchomiłem i krok po kroku znalazłem winowajcę - plik dwmapi.dll z Visty. Usunąłem i wszystko chodzi doskonale.

Ogromne dzięki!

Pozdrawiam

gnaw

sierpnia 18, 2014 22:36

Co o tym myślisz?

(wymagane) 
(opcjonalne)
(wymagane) 

  
Wprowadź kod: (wymagane)
Wyślij

Subskrypcje

W oparciu o Community Server (Personal Edition), Telligent Systems