G13 писать в личку - получил ответ - у меня нет виллы на карибах скачать WDK - качаю уж просто интересно посмотреть сравнить
Грейт, благодарю за статью. Уже купил книгу Руссиновича и Соломона, читаю. Только на будущее возник вопрос, как прикрутить ДДК к VC 2008 ?
Ins3t Если ты внимательно читал статью, то наверняка видел там ссылку http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/ Там это расписано
а что там особо прикручивать - указать пути к инклудам и либам, да поставить пару галочек в проекте. интересно, что даже C++ дрова можно компилить ))
а в чём принципиальная проблема? мелкомягкие ведь предоставляют директиву __try __except(). int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep) { OutputDebugString(TEXT("exception.")); if (code == EXCEPTION_INT_DIVIDE_BY_ZERO) { OutputDebugString(TEXT("caught AV as expected.")); return EXCEPTION_EXECUTE_HANDLER; } OutputDebugString(TEXT("didn't catch AV, unexpected.")); return EXCEPTION_CONTINUE_SEARCH; } void Main() { int x = 0; __try { x /= 0; } __except (filter(GetExceptionCode(), GetExceptionInformation())) { x = 1; } } аналогично для кернела. только класс исключений создать..
а при чём тут msvcp80.lib? и без неё неплохо собирается. указываю nodefaultlib + ntoskrnl (в ядре) или ntdll (в юзере) экспортирует вот эту заразу: external symbol __C_specific_handler. всё собирается со стандартным набором библиотек. в кернеле х.з. - влом дров компилить, а в юзере всё пучком. в таблице экспорта только ntdll.dll.
cupuyc А ты попробуй С++ исключения try/catch/throw. Ясен пень SEH будет компилится и работать и в юзере и в ядре. А это другое
Могут использовать, но: 1) не обязательно; 2) по-другому. Раз Great не хочет делиться своим кодом, начинать мона отсюда http://www.openrce.org/articles/full_view/21
Используют. Но код обработки исключения, обработчик throw (__CxxThrowException) от мелкомягких требуют всякие функции из кернела, как мне помнится. И в ядре работать не будут J0E У меня не совсем отлажено. В целом работает, но могут быть косяки. Если что я предупреждал ща поищу
Учитывая открытость вполне рабочей реализации, косяки не особо волнуют. Больше интересно каким образом удалось избавиться от _getptd()
Копии статьи нет, напишу от себя. В двух словах о настройке COM порта. Создаем новый Serial Port в вмваре, выбираем типы This end is a server, The other end is an application. После создания ставим в свойствах порта галочку Yield CPU on poll. Порту назначается автоматически имя \\.\pipe\com_1 (если он первый) В Windows в boot.ini берем основную загрузочную запись, с которой грузится винда, и копируем, указывая в копии дополнительные параметры ядра - /DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 Затем перезагружаем вмварю, выбираем этот пункт. Врубаем WinDbg: "D:\Program Files\Debugging Tools for Windows\windbg.exe" -y D:\Symbols -k com:pipe,port=\\192.168.0.1\pipe\com_1,reconnect (пример для моей тачки; так же можно использовать kd) Должны увидеть "Waiting for reconnect...". Нажимаем Ctrl-Break (в случае kd - Ctrl-C), WinDbg посылает команду на останов в виртуалку. Должны увидеть: Далее нажимаем F5 (windbg) или вводим команду g (kd). Далее система работает под присмотром отладчика. Рекомендую на данном этапе сделать снапшот (когда система загрузится). После восстановления снапшота при следующих запусках достаточно запустить WinDbg, подсоединиться и сделать Ctrl-Break, потом Go (простое присоединение не пойдет - почему-то ядро считает, что отладчика нет и любой бсод свалит систему, вместо того, чтобы всплыть в отладчике. только после ctrl-break/go система "признает" отладчик)
В случае с Windows >= Vista там используется новая версия ntldr, которая использует в качестве базы не boot.ini, а специальную bcd в собственном формате (boot configuration database). Для ее редактирования есть программы bcdedit (поставляется с Windows, консольная, требует запуска с консоли администратора), EasyBCD (сторонняя, с графическим интерфейсом). Как пользоваться bcdedit написано в её хелпе и мсдн. У EasyBCD интерфейс интуитивный. Нужно создать новую загрузочную запись, скопировав параметры существующей, где поставить необходимые галочки для отладки ядра. К сожалению, у меня сейчас нет возможности сделать скриншоты, а по памяти я не помню. Как будет возможность, я сделаю. В остальном процесс мало отличается от предыдущих версий Windows
Ссылка на Windows Internals Fifth Edition от Руссиновича http://www.knigka.info/2009/11/18/windows-internals-fifth-edition.html