Да какие извраты - просто создать акк прямо из встроенной в магазин менюшки, а потом войти в эту учётку. Можно даже совершить вход облегчённым способом - только для UWP-приложений, чтобы это никак не повлияло на остальную систему (в менюшке есть соответствующий пункт). Очень советую довести до конца и всё-таки попробовать UWP'шный WinDbg. Очень вкусная штука! --- Сообщение объединено, 21 июл 2019 --- Кстати, TTD, насколько знаю, добавили в какой-то из инсайдерских билдов визуалки. Правда, хоть у меня и инсайдерская, TTD там видел только для шарпа... Возможно, он как-то включается и настраивается для плюсов - но как?..
HoShiMin, > попробовать UWP'шный WinDbg. Очень вкусная штука! Виндебаг в принципе штука стрёмная и лишний раз его не юзают. Я даже не помню когда последний раз его запускал, только что бы крэш дампы смотреть. Тем более он нужен довольно в редких случаях, для специфической отладки - поиска ошибок в левом софте или если с осью что то не так. Обычно при написании драйверов он и вовсе не нужен. Ну это у тех кто знает что пишет, если как тс делать это комментами, то конечно его придётся не закрывать даже.
На самом деле, даже в случае простых опечаток экономит кучу времени. Забыл где-то присвоить нулевому указателю адрес, через сотню строчек всплыло. Запустил - хлоп! - сразу встали на нужной строчке, по трейсу вернулись обратно, нашли указатель -> PROFIT. Чего зря время на бсоды тратить?
HoShiMin, а вы пробовали совмещать VirtualKD и виртуалбокс? Я разбираюсь, и что-то не получается; хотя делаю по инструкции Мб что виртуалбокс новый, а виртуалкд старый.
VirtualKD пробовал только с VMware. Но встречный вопрос: почему именно такой выбор? Почему нужен именно VirtualKD, а не использовать, например, KDNET?
Читал, что это очень удобная вещь, упрощающая дебаг. Тут и так все очень сложно. Ну если не пойдет, то попробую обычную отладку через СОМ порт.. А по ссылке (KDNET) - я верно понимаю, что он только для вин8 и выше? Я пробую дебажить ХР и семерку. И еще - подскажите, как вообще правильно отладить загрузку винды? Ну т.e например я хочу поставить брекпойнт на логине пользователя в систему. Реально ли это, в какую сторону копать? В идеале - хочу пошагово посмотреть, как загружается ОС, какие драйвера стартуют , в какой последовательности.
Сам по себе он ничего не упрощает - это лишь замена виртуального COM-порта на что-то более быстрое. Из недостатков - он патчит систему и иногда подвисает. Да, но это не проблема: ставь десятку и отлаживай как белый человек. KDNET очень быстрый и легко настраивается. А по поводу отладки загрузки, KD опционально может вызывать int3 при подключении отладчика. Запускаем WinDbg, запускаем виртуалку, KD к нам коннектится и останавливается - как видишь, на ранних фазах запуска, где-то в KiSystemStartup. А дальше ставь нужные брейкпоинты.
HoShiMin, > на ранних фазах запуска, где-то в KiSystemStartup Ничего что для M0rg0t, это сложно может быть такое объяснение ?
Есть две версии VritualKd. Собственно, от sysprogs и форк VirtualKd Redux. Последний обновляется вроде как и баги исправляются. На крайняк можно отправить Issue разработчику. А так, если KDNET поддерживается, то лучше использовать его, как ранее заметил HoShiMin. У меня с ним были какие-то проблемы, вылетала ошибка, что железо не поддерживает или типа того.
MaKaKa, да, и в самом деле, эта версия работает (а официальная нет); правда тут (если вдруг кто будет гуглить) нужно добавить сертификат в доверенные (иначе не загружает длл). Хз, не опасно ли это делать, просто потестил. Indy_, это все очень сложно, и видимо придется отложить до лучших времен. HoShiMin, я просто хотел начать с ХР или семерки (или даже вин2к) чтобы лучше понять процесс загрузки ОС. Вообще, что можно почитать на эту тему? У меня что-то вообще ничего не получается. Допустим, хочу посмотреть какой драйвер когда грузится, пишу Почему так? Далее, такие ошибки есть Код (Text): BGHELP: Can't use symbol server for ntdll.pdb - no header information available DBGHELP: ntdll.pdb - file not found *** WARNING: Unable to verify timestamp for ntdll.dll DBGHELP: ntdll - no symbols loaded Может нужно как-то настраивать символы и на таргет-машине? Или мс не поддерживает уже старые ОС и символы от них? Как вот мне дотрейсить до входа в систему? Когда-то 1 товарищ отсюда писал, что нужно ставить бряк на msv1_0.dll!LsaApLogonUserEx2, однако ничего не работает (и вообще неясно, откуда эта инфа) Или надо реверсить винлогон?
На целевой машине, кроме включения ядерного отладчика, ничего настраивать не надо. Все символы WinDbg подгрузит сам (и для XP тоже). Если ты находишься в контексте процесса ядра, то у тебя нет ntdll (как и юзермодного адресного пространства). Если надо поставить бряк в каком-то конкретном процессе, то сначала надо переключиться на него. Посмотреть текущий контекст можно командой "!process", которая выведет информацию о текущем процессе и его потоках. Чтобы посмотреть список всех процессов, набери "!process 0 0". Например, в списке процессов тебя заинтересовал процесс WinInit: PROCESS ffffdf829aee4080 SessionId: 0 Cid: 02c0 Peb: bc151d3000 ParentCid: 0270 DirBase: 173257002 ObjectTable: ffffb08d50bf8e40 HandleCount: 180. Image: wininit.exe Переключаешься на процесс: Код (Text): kd> !process /i ffffdf829aee4080 kd> g Подгружаешь символы, если они не подгрузились сами: Код (Text): kd> .reload На этом этапе ты уже можешь ставить брейкпоинты на юзермодные функции: Код (Text): kd> bp ntdll!NtProtectVirtualMemory Если надо найти конкретный поток, то смотришь список потоков: Код (Text): kd> !process ffffdf829aee4080 0x6 Флажок 0x6 - показать потоки с их стактрейсами. Например, заинтересовал этот: THREAD ffffdf829aee5080 Cid 02c0.02c4 Teb: 000000bc151d4000 Win32Thread: ffffdf829a5fd460 WAIT: (UserRequest) UserMode Non-Alertable ffffdf829ac8e5e0 NotificationEvent Not impersonating DeviceMap ffffb08d4d436660 Owning Process ffffdf829aee4080 Image: wininit.exe Attached Process N/A Image: N/A Wait Start TickCount 562 Ticks: 1683 (0:00:00:26.296) Context Switch Count 323 IdealProcessor: 0 UserTime 00:00:00.000 KernelTime 00:00:00.046 Win32 Start Address wininit!WinMainCRTStartup (0x00007ff76f283e30) Stack Init fffff1827c709c90 Current fffff1827c7096a0 Base fffff1827c70a000 Limit fffff1827c704000 Call 0000000000000000 Priority 15 BasePriority 15 PriorityDecrement 0 IoPriority 2 PagePriority 5 Kernel stack not resident. Child-SP RetAddr : Args to Child : Call Site fffff182`7c7096e0 fffff807`10665850 : 00000000`fffffffe 00000000`0000000d 00000000`00000040 00000000`00000101 : nt!KiSwapContext+0x76 fffff182`7c709820 fffff807`10664d7f : ffffdf82`9a5fe000 ffffdf82`9aee5ad0 fffff182`7c7099e0 ffffdf82`9aee5080 : nt!KiSwapThread+0x500 fffff182`7c7098d0 fffff807`10664623 : 00000000`00000000 fffff807`00000000 00000000`00000000 ffffdf82`9aee51c0 : nt!KiCommitThreadWait+0x14f fffff182`7c709970 fffff807`10a2cb01 : ffffdf82`9ac8e5e0 00000000`00000006 fffff182`7c709a01 000000bc`14f6fb00 : nt!KeWaitForSingleObject+0x233 fffff182`7c709a60 fffff807`10a2cbaa : ffffdf82`9aee5080 00000000`00000000 00000000`00000000 00000000`00000001 : nt!ObWaitForSingleObject+0x91 fffff182`7c709ac0 fffff807`108075b5 : ffffdf82`9aee5000 000000bc`00000000 00000000`00000000 00000000`00000000 : nt!NtWaitForSingleObject+0x6a fffff182`7c709b00 00007ffb`bc16cc94 : 00007ffb`b9bba34e 000000bc`14f6fbe0 0000ab8f`4a7634bd 00007ff7`6f2e0170 : nt!KiSystemServiceCopyEnd+0x25 (TrapFrame @ fffff182`7c709b00) 000000bc`14f6fb58 00007ffb`b9bba34e : 000000bc`14f6fbe0 0000ab8f`4a7634bd 00007ff7`6f2e0170 00007ffb`bc120679 : ntdll!NtWaitForSingleObject+0x14 000000bc`14f6fb60 00007ff7`6f2ab208 : 00007ff7`6f2e0170 00000000`00000150 00000000`00000000 00000000`000000f8 : KERNELBASE!WaitForSingleObjectEx+0x8e 000000bc`14f6fc00 00007ff7`6f283db6 : 00000000`0000000a 00000000`00000000 00000000`00000000 00000000`00000000 : wininit!WinMain+0x1134 000000bc`14f6fd30 00007ffb`ba997034 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : wininit!__scrt_common_main_seh+0x106 000000bc`14f6fd70 00007ffb`bc122651 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14 000000bc`14f6fda0 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21 Переключаешься на поток: Код (Text): kd> .thread ffffdf829aee5080 Например, интересует тебя девятый фрейм (wininit!WinMain+0x1134) - переключаешься в него: Код (Text): kd> .frame 9 ...и получаешь контекст в этом фрейме. Примерно так отладка и происходит. Если же надо отлаживать что-то в ядре, то для ядра алиас "nt": Код (Text): kd> bp nt!ZwLoadDriver ----------------- Все команды, которые я здесь использовал, описаны в документации и во встроенной справке к WinDbg: Getting Started with WinDbg (User-Mode) - Windows drivers | Microsoft Docs Getting Started with WinDbg (Kernel-Mode) - Windows drivers | Microsoft Docs Также рекомендую шпаргалки: Common WinDbg Commands (Thematically Grouped) repnz/windbg-cheat-sheet: My personal cheat sheet for using WinDbg for kernel debugging (github.com) Я использую WinDbg Preview из Microsoft Store - он с современным удобным интерфейсом, что тоже сильно упростит отладку в сравнении с классическим WinDbg. Например, он поддерживает JavaScript: JavaScript Debugger Example Scripts - Windows drivers | Microsoft Docs
HoShiMin, еще раз спасибо, это все очень сложно, надо постепенно изучать. Почему может быть такая ошибка? Код (Text): kd> !process 0 0 **** NT ACTIVE PROCESS DUMP **** Error in reading nt!_EPROCESS at 00000000 kd> !process Failed to get VadRoot PROCESS 80559e20 SessionId: none Cid: 0000 Peb: 00000000 ParentCid: 0000 после перезапуска windbg пропадает иногда
А что за система на виртуалке? И это появляется после каких-то действий или коннектишься к отладчику - и сразу ошибки?
HoShiMin, ХР sp2 вроде; коннект , идет загрузка (лого ХР) и вот такая ошибка мб потому что ОС древняя?
Всё может быть. Если остановить систему не во время запуска, а где-нибудь на рабочем столе, !process продолжит фэйлиться? И всё же, какой сакральный смысл в исследовании столь старых систем? Почему просто не взять десятку? С ней точно проблем не будет.
Я ничего не понимаю в этой загрузке ОС, мб в старой минималистичной ХР будет проще разобраться, чем в десятке (с миллионом новых процессов) тем более, по ХР есть книга Руссиновича (по загрузке) , а по десятке хз что читать.