1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Windows 7 x64: Как отловить BSOD в ntoskrnl?

Тема в разделе "WASM.NT.KERNEL", создана пользователем ntcdm, 16 окт 2011.

  1. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Уважаемые форумчане!

    Windows 7 x64 со всеми обновлениями на сентябрь 2011.

    Недавно столкнулся с такой проблемой: при холодном старте компьютера вываливается BSOD PROCESS1_INITIALIZATION_FAILED. если после этого комп перезагрузить, то загрузка проходит нормально.

    Вот анализ крэш-дампа:
    Код (Text):
    1. Windows 7 Kernel Version 7601 (Service Pack 1) MP (6 procs) Free x64
    2. Product: WinNt, suite: TerminalServer SingleUserTS
    3. Built by: 7601.17640.amd64fre.win7sp1_gdr.110622-1506
    4. Machine Name:
    5. Kernel base = 0xfffff800`03800000 PsLoadedModuleList = 0xfffff800`03a45670
    6. Debug session time: Fri Oct 14 23:32:35.153 2011 (UTC + 3:00)
    7. System Uptime: 0 days 0:00:12.948
    8. Loading Kernel Symbols
    9. ..........................................................
    10. Loading User Symbols
    11. *******************************************************************************
    12. *                                                                             *
    13. *                        Bugcheck Analysis                                    *
    14. *                                                                             *
    15. *******************************************************************************
    16.  
    17. Use !analyze -v to get detailed debugging information.
    18.  
    19. BugCheck 6B, {0, 0, 0, 0}
    20.  
    21. Probably caused by : ntkrnlmp.exe ( nt!Phase1InitializationDiscard+133b )
    22.  
    23. Followup: MachineOwner
    24. ---------
    25.  
    26. 0: kd> !analyze -v
    27. *******************************************************************************
    28. *                                                                             *
    29. *                        Bugcheck Analysis                                    *
    30. *                                                                             *
    31. *******************************************************************************
    32.  
    33. PROCESS1_INITIALIZATION_FAILED (6b)
    34. Arguments:
    35. Arg1: 0000000000000000, Indicates the NT status code that caused the failure.
    36. Arg2: 0000000000000000, (reserved)
    37. Arg3: 0000000000000000
    38. Arg4: 0000000000000000
    39.  
    40. Debugging Details:
    41. ------------------
    42.  
    43.  
    44. CUSTOMER_CRASH_COUNT:  1
    45.  
    46. DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT
    47.  
    48. BUGCHECK_STR:  0x6B
    49.  
    50. PROCESS_NAME:  System
    51.  
    52. CURRENT_IRQL:  0
    53.  
    54. LAST_CONTROL_TRANSFER:  from fffff80003dae56b to fffff8000387cc10
    55.  
    56. STACK_TEXT:  
    57. fffff880`009a9b38 fffff800`03dae56b : 00000000`00000000 00000000`00000000 fffff800`00814150 fffff800`00814150 : nt!KeBugCheck
    58. fffff880`009a9b40 fffff800`03cfe979 : 000739c7`00073780 fffffa80`06a0c1c0 00000000`00000080 fffffa80`06a0c740 : nt!Phase1InitializationDiscard+0x133b
    59. fffff880`009a9d10 fffff800`03b17fee : 00073e3f`00073d38 00000000`00000080 0002bf90`00073e68 fffff800`0386e5d9 : nt!Phase1Initialization+0x9
    60. fffff880`009a9d40 fffff800`0386e5e6 : fffff800`039f2e80 fffffa80`06a0c1c0 fffff800`03a00cc0 0002a8fc`000749f2 : nt!PspSystemThreadStartup+0x5a
    61. fffff880`009a9d80 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : nt!KxStartSystemThread+0x16
    62.  
    63.  
    64. STACK_COMMAND:  kb
    65.  
    66. FOLLOWUP_IP:
    67. nt!Phase1InitializationDiscard+133b
    68. fffff800`03dae56b cc              int     3
    69.  
    70. SYMBOL_STACK_INDEX:  1
    71.  
    72. SYMBOL_NAME:  nt!Phase1InitializationDiscard+133b
    73.  
    74. FOLLOWUP_NAME:  MachineOwner
    75.  
    76. MODULE_NAME: nt
    77.  
    78. IMAGE_NAME:  ntkrnlmp.exe
    79.  
    80. DEBUG_FLR_IMAGE_TIMESTAMP:  4e02aaa3
    81.  
    82. FAILURE_BUCKET_ID:  X64_0x6B_nt!Phase1InitializationDiscard+133b
    83.  
    84. BUCKET_ID:  X64_0x6B_nt!Phase1InitializationDiscard+133b
    85.  
    86. Followup: MachineOwner
    Я хотел было загрузить ядро в дизасеемблер IDA, но столкнулся с тем, что у меня в папке c:\windows\system32 есть только файл ntoskrnl.exe, а файла ntkrnlmp.exe в котором и происходит крэш, в системе нет! Возможно, Винда при инсталляции его переименовывает?

    В отладчике функа Phase1Initialization выглядит так:
    Код (Text):
    1. PAGE:00000001404FE970 Phase1Initialization proc near
    2. PAGE:00000001404FE970                 sub     rsp, 28h
    3. PAGE:00000001404FE974                 call    near ptr 1405AD230h
    4. PAGE:00000001404FE979                 xor     ecx, ecx
    5. PAGE:00000001404FE97B                 add     rsp, 28h
    6. PAGE:00000001404FE97F                 jmp     MmZeroPageThread
    7. PAGE:00000001404FE97F Phase1Initialization endp
    Функции Phase1InitializationDiscard IDA вообще не видит!
    Помогите, кто сталкивался с отладкой загрузки системы, что посоветуете.
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    IDA часто не видит символы, даже plugin такой был -- pdb+. Начиная с версии 6 с символами ситуация получше, но, кажется, тоже не все символы читаются. Поэтому, думаю, стоит посчитать адрес ф-ии относительно базового адреса загруженного ядра и потом найти ф-ию руками в открытом в IDA файле. Ну и надо смотреть код nt!Phase1InitializationDiscard, конечно же.
     
  3. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Я пытался в IDA найти байты (сгнатуру), которые находятся в функции Phase1InitializationDiscard, но их IDA тоже не может найти.

    Что это, какая то защита или вирус?
     
  4. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Нет, это просто ошибки IDA. Я не знаю насчет поиска сигнатуры, самое простое -- как уже сказал -- посмотреть адрес целевой ф-ии в отладчике и вычесть из него базовый адрес загруженного ядра (его можно увидеть по команде lm), затем открыть файл в IDA, взять базовый адрес, по которому IDA загрузила файл и прибавить к нему относительное смещение, полученное в предыдущем шаге. Результат -- адрес ф-ии в IDA. Если говорить проще, надо посчитать RVA ф-ии и прибавить его к базовому адресу в IDA. Ну или поставить IDA 6.X -- она намного лучше символы читает, чем 5.Х, может прочитает символ тогда.

    Еще вариант: посмотреть в отладчике куда ссылается указатель в инструкции:

    PAGE:00000001404FE974 call near ptr 1405AD230h

    Судя по всему, там косвенный вызов через глобальную переменную.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.191
    Адрес:
    Russia
    ntcdm
    Подключаем WinDBG на стадии загрузки ОС. Устанавливаете бряк на функцию, и трейсите.
    Мож быть реально у вас какой то вирь пропатчил кернел не совсем правильно.
     
  6. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    в IDA 6.1 тоже самое =(
     
  7. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    прверил на вирустотале - пишет файл чистый. Попробую отладку запустить, может что полезное увижу
     
  8. Person

    Person Hugh Person

    Публикаций:
    0
    Регистрация:
    29 июн 2011
    Сообщения:
    23
    Возможна она открывает SysWow64 вместо system32 ? Возьмите эксплорером посмотрите есть ли он.
     
  9. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    я уже с редиректами файловой системы в винде знаком +) я специально эксплорером скопировал в отдельную папку
     
  10. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Vista+ всегда использует MP ядро. Ваш ntoskrnl это на самом деле ntkrnlmp.
     
  11. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Выложи свой ntoskrnl.exe здесь.
     
  12. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
  13. movdqu

    movdqu New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    33
  14. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Сервис пак 1 стоит. Файл удалял. Та же ботва (
     
  15. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    ntcdm
    Посмотрел ядро, довольно странно. Ф-ия Phase1Initialization вызывает нечто с помощью относительного (e8) вызова. Вызов ссылается за пределы ядра. Либо в процессе загрузки по этому адресу динамически помещается код, либо инструкция корректируется во время загрузки. В общем, надо смотреть отладчиком, думаю. В моем ядре (7, 64) такая же ситуация. Можно еще в WRK посмотреть (сейчас нет под рукой), может станет понятнее, если не изменилось ничего с того времени.
     
  16. Bazhan

    Bazhan Андрей

    Публикаций:
    0
    Регистрация:
    8 янв 2008
    Сообщения:
    71
    Адрес:
    Украина
    Код (Text):
    1. 0: kd> k
    2. Child-SP          RetAddr           Call Site
    3. fffff880`009a9b38 fffff800`03dae56b nt!KeBugCheck
    4. fffff880`009a9b40 fffff800`03cfe979 nt!Phase1InitializationDiscard+0x133b
    5. fffff880`009a9d10 fffff800`03b17fee nt!Phase1Initialization+0x9
    6. fffff880`009a9d40 fffff800`0386e5e6 nt!PspSystemThreadStartup+0x5a
    7. fffff880`009a9d80 00000000`00000000 nt!KxStartSystemThread+0x16
    8. 0: kd> ub nt!Phase1InitializationDiscard+0x133b
    9. nt!Phase1InitializationDiscard+0x131c:
    10. fffff800`03dae54c e84feefeff      call    nt!ExInitLicenseData (fffff800`03d9d3a0)
    11. fffff800`03dae551 488bd5          mov     rdx,rbp
    12. fffff800`03dae554 418bcc          mov     ecx,r12d
    13. fffff800`03dae557 e864a4ffff      call    nt!PsInitSystem (fffff800`03da89c0)
    14. fffff800`03dae55c 413ac5          cmp     al,r13b
    15. fffff800`03dae55f 750b            jne     nt!Phase1InitializationDiscard+0x133c (fffff800`03dae56c)
    16. fffff800`03dae561 b96b000000      mov     ecx,6Bh
    17. fffff800`03dae566 e8a5e6acff      call    nt!KeBugCheck (fffff800`0387cc10)
    18. 0: kd> r
    19. rax=00000000c0000100 rbx=0000000000000000 rcx=000000000000006b
    20. rdx=fffffa8006938000 rsi=fffff80000819ea0 rdi=0000000000000003
    21. rip=fffff8000387cc10 rsp=fffff880009a9b38 rbp=fffff80000814150
    22.  r8=00000000000078f0  r9=0000000000000400 r10=fffff80003800000
    23. r11=fffff880009a9990 r12=0000000000000001 r13=0000000000000000
    24. r14=0000000000000007 r15=0000000000000002
    25. iopl=0         nv up ei ng nz na pe nc
    26. cs=0010  ss=0018  ds=002b  es=002b  fs=0053  gs=002b             efl=00000282
    27. nt!KeBugCheck:
    28. fffff800`0387cc10 4883ec28        sub     rsp,28h
    29. 0: kd> !error @rax 1
    30. Error code: (NTSTATUS) 0xc0000100 - Indicates the specified environment variable name was not found in the specified environment block.
    31. 0: kd> lm m nt
    32. start             end                 module name
    33. fffff800`03800000 fffff800`03de9000   nt         (pdb symbols)          c:\symbols\ntkrnlmp.pdb\47F5C3BF9E0A493C9F63BB8F6413358B2\ntkrnlmp.pdb
    34. 0: kd> s -b fffff800`03800000 fffff800`03de9000 00 01 00 c0
    35. fffff800`03c6f766  00 01 00 c0 75 4d 8d 0c-1b 0b cb 81 e1 44 44 44  ....uM.......DDD
    36. fffff800`03c6f9c0  00 01 00 c0 3b c7 74 3b-41 3b c6 0f 85 f7 00 00  ....;.t;A;......
    37. fffff800`03c6fa13  00 01 00 c0 c7 44 24 30-04 00 00 00 4c 89 74 24  .....D$0....L.t$
    38. fffff800`03c6fc86  00 01 00 c0 75 4d 8d 0c-1b 0b cb 81 e1 44 44 44  ....uM.......DDD
    39. fffff800`03cbfc71  00 01 00 c0 45 8b cd 4c-8d 05 51 39 ec ff ba 0b  ....E..L..Q9....
    40. fffff800`03cbfd82  00 01 00 c0 41 3b c4 75-4e 41 8b 4e 08 8d 04 09  ....A;.uNA.N....
    41. fffff800`03cc0415  00 01 00 c0 41 be ff ff-00 00 45 8b cf 4c 8d 05  ....A.....E..L..
    42. fffff800`03cc053d  00 01 00 c0 41 3b c4 75-52 41 8b 4e 08 8d 04 09  ....A;.uRA.N....
    43. fffff800`03cc08ff  00 01 00 c0 41 0f 44 fe-49 3b f6 74 0a 33 d2 48  ....A.D.I;.t.3.H
    44. fffff800`03cc0b9f  00 01 00 c0 41 0f 44 fe-49 3b f6 74 0a 33 d2 48  ....A.D.I;.t.3.H
    45. fffff800`03cc1bb6  00 01 00 c0 75 21 33 c0-eb 1d 48 8d 54 24 50 48  ....u!3...H.T$PH
    46. fffff800`03cdbc76  00 01 00 c0 75 08 41 8b-d5 41 8b dd eb 07 8b 94  ....u.A..A......
    47. fffff800`03cdbf16  00 01 00 c0 75 08 41 8b-d5 41 8b dd eb 07 8b 94  ....u.A..A......
    48. 0: kd> ln fffff800`03c6f766
    49. (fffff800`03c6f670)   nt!NtDeleteDriverEntry+0xf6   |  (fffff800`03c6f870)   nt!NtQueryBootOptions
    50. 0: kd> ln fffff800`03c6f9c0
    51. (fffff800`03c6f870)   nt!NtQueryBootOptions+0x150   |  (fffff800`03c6fb90)   nt!NtDeleteBootEntry
    52. 0: kd> ln fffff800`03c6fa13
    53. (fffff800`03c6f870)   nt!NtQueryBootOptions+0x1a3   |  (fffff800`03c6fb90)   nt!NtDeleteBootEntry
    54. 0: kd> ln fffff800`03c6fc86
    55. (fffff800`03c6fb90)   nt!NtDeleteBootEntry+0xf6   |  (fffff800`03c6fd90)   nt!PspApplyIFEOPerfOptions
    56. 0: kd> ln fffff800`03cbfc71
    57. (fffff800`03cbf910)   nt!ExpSetDriverEntry+0x360   |  (fffff800`03cbff40)   nt!ExpSetBootEntry
    58. 0: kd> ln fffff800`03cbfd82
    59. (fffff800`03cbf910)   nt!ExpSetDriverEntry+0x471   |  (fffff800`03cbff40)   nt!ExpSetBootEntry
    60. 0: kd> ln fffff800`03cc0415
    61. (fffff800`03cbff40)   nt!ExpSetBootEntry+0x4d4   |  (fffff800`03cc0700)   nt!NtSetDriverEntryOrder
    62. 0: kd> ln fffff800`03cc053d
    63. (fffff800`03cbff40)   nt!ExpSetBootEntry+0x5fc   |  (fffff800`03cc0700)   nt!NtSetDriverEntryOrder
    64. 0: kd> ln fffff800`03cc08ff
    65. (fffff800`03cc0700)   nt!NtSetDriverEntryOrder+0x1fe   |  (fffff800`03cc0940)   nt!NtModifyDriverEntry
    66. 0: kd> ln fffff800`03cc0b9f
    67. (fffff800`03cc09a0)   nt!NtSetBootEntryOrder+0x1fe   |  (fffff800`03cc0be0)   nt!NtModifyBootEntry
    68. 0: kd> ln fffff800`03cc1bb6
    69. (fffff800`03cc1b10)   nt!BiDeleteEfiVariable+0xa6   |  (fffff800`03cc1c00)   nt!BiDeleteBootEntry
    70. 0: kd> ln fffff800`03cdbc76
    71. (fffff800`03cdba40)   nt!NtQueryDriverEntryOrder+0x236   |  (fffff800`03cdbce0)   nt!NtQueryBootEntryOrder
    72. 0: kd> ln fffff800`03cdbf16
    73. (fffff800`03cdbce0)   nt!NtQueryBootEntryOrder+0x236   |  (fffff800`03cdbf80)   nt!NtEnumerateBootEntries
    Предполагаем, что в rax статус код. Поскольку из nt!PsInitSystem не вызывается ни одна функция которая может возвращать Error code: (NTSTATUS) 0xc0000100 то похоже что сторонний код использует одну из этих функций.
    Попробуй в Kernel dump команду !chkimg nt. Если все же изменений в ядре нет, тогда ставим условный брейкпоинт на запись в rax значения 0xc0000100 и смотрим что не так.
     
  17. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Проблема инициализации видео адаптера. (Не тот порядок? хихихи)

    Вообще юзаем виндовые команды:dntknw:Предворительно посмотрев на что приходили апдейты)
    sfc
    chkdisk
    И конечно если уже и это не помогает то restore from boot.
     
  18. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Как вы это определили, поделитесь секретом?

    Я конечно уже плююсь на свою Атишную видяху, ибо драйвера у них всегда кривые!
    Но как вы определили в этом случае?

    Вы думаете что неправильный порядок загрузки драйверов?
    chkdisk делается регулярно после таких Бсодов.
    sfc делал, но они не может восстановить одну DLLку, которая вряд-ли имеет отношение к видеоадаптеру?

    restore from boot -это типа переустановить винду? а если баг повторится? винда свежая, устанавливал недавно же.
     
  19. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    ntcdm
    Не не переустановить, винда имеет делать восстановления. Вообще сделайте эти действия потом будем думать что делать дальше.
     
  20. texnar6

    texnar6 New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2012
    Сообщения:
    2
    Уважаемые форумчане!

    Испытываю такую же проблему, как и у автора топика "ntcdm" первое включение, холодный старт, система работает не стабильно BSOD'ы лупит на любых действиях(хоть браузер запусти, хоть музыку включи) одна перезагрузка и всё работает стабильно сутками напролёт, железо в норме, около года сидел на сборке Windows 7 Diamond ни одного BSOD'a за всё время! только пробую перейти на любую другую сборку, на холодном старте проблемы... использую чистые сборки microsoft'a та же петрушка. Лупит BSOD'ы 0x0000001A: MEMORY_MANAGEMENT чаще всего, оперативки 6 гиг, три планки по 2, тестировал memtes'том не однократно, в разных слотах, по одной, всё хорошо, да и на Diamond'e работает стабильно... Сейчас использую собственную сборку, чистая ОС win7 SP1 x64 + заплатки, на холодном старте приходилось отгребать 3 раза подрят BSOD'ы только после этого система работала, от двух удалось избавиться, но вот последний ни как не могу отловить, всё время на разных процессах с разными файлами, но чаще всего виновник ntkrnlmp.exe

    Код (Text):
    1. Crash date:         Mon Dec 19 12:12:01.874 2011 (GMT+2)
    2. Stop error code:    0x1a_41790
    3. Process name:       SearchIndexer.
    4. Probably caused by: ntkrnlmp.exe ( nt:FNODOBFM::`string'+36024 )
    5.  
    6.  
    7. Crash date:         Tue Dec 20 11:38:34.564 2011 (GMT+2)
    8. Stop error code:    0x50
    9. Process name:       WerFault.exe
    10. Probably caused by: memory_corruption ( ntMiDeleteAddressesInWorkingSet+468 )
    11.  
    12.  
    13. Crash date:         Thu Dec 22 11:19:51.658 2011 (GMT+2)
    14. Stop error code:    0x1a_41790
    15. Process name:       firefox.exe
    16. Probably caused by: ntkrnlmp.exe ( nt:FNODOBFM::`string'+36024 )
    17.  
    18.  
    19. Crash date:         Fri Dec 23 14:14:58.112 2011 (GMT+2)
    20. Stop error code:    0x1a_41790
    21. Process name:       svchost.exe
    22. Probably caused by: ntkrnlmp.exe ( nt:FNODOBFM::`string'+36024 )
    23.  
    24.  
    25. Crash date:         Sat Dec 24 10:59:09.550 2011 (GMT+2)
    26. Stop error code:    0x1a_41790
    27. Process name:       firefox.exe
    28. Probably caused by: ntkrnlmp.exe ( nt:FNODOBFM::`string'+36024 )
    Системные требования:
    Процессор: Intel Core i7 920 Bloomfield 2.66GHz/8MB/4.8 GT/s /S1366
    Материнская плата: Gigabyte GA-EX58-UD3R v1.6 (BIOS Fk1 - свежий)
    Память: Elpida EBJ21UE8BDF0-DJ-F DDR3 SDRAM 1333
    Видео: MSI GeForce N260 GTX Lightning 1792 Мб
    Жесткий диск: WDC WD15EADS-00P8B0 (WD-WMAVU0581960) 1.5TB

    В разгоне: процессор, оперативка, видяха (уже несколько дней как убрал разгон с всего, попробовал поставить систему, BSOD по прежнему остался)

    Просто в отчаянии, ничего не помогает, не могу найти источник проблемы : (

    Выкладываю парочку дампов и свой ntkrnlmp.exe, помогите пожалуйста найти неисправность!

    http://depositfiles.com/files/1ch2yi3ti
    http://www.mediafire.com/?mi723xa4hxc4ibc (mirror)