Трассировка описателей. Вторая серия

Краткое содержание первой части:

Не получается продолжить выполнение кода после того, как было сгенерировано исключение STATUS_INVALID_HANDLE - почему-то портится сохраненный контекст процессора. В частности, не сохраняются non-volatile регистры esi и edi.

Некто Indy засомневался в том, что происходит именно это. Следует сказать, что засомневался он не без оснований. На самом деле, способы возбудить исключение пользовательского режима из кода в ядре можно пересчитать по пальцам одной руки и все они формируют конекст процессора одинаково. Получается, что если бы регистры не сохранялись, то не работали бы все исключения, а не избирательно STATUS_INVALID_HANDLE.

Покопавшись в отладчике я понял в чем дело.

Read On →

Мир становится меньше

В аэропорту Lihue, Hawaii увидел прекрасное - 24 штуки настенных часов, которые, как я понимаю, призваны показать текущее время в каждой из существующих часовых зон. (Тут нужно заметить, что временных зон не 24, а где-то около 40. Более того, их число иногда меняется, но не будем придираться). Текущее время в … При взгляде на картинку у меня немедленно возникает два вопроса. Во-первых, кто это под Рейкъявиком профилонил переход на единое всеземное время? Read On →

Я составляю списки, а затем я составляю списки списков

Веселый тред на reddit.com: Как бы вы объяснили в чем состоит ваша работа человеку, который родился 1000 лет назад: Marketing? I’d just say I’m a whore. Using a self moving horseless cart I take Italian food to people who ask for it over vast distances. Sorcery Примерно каждый четвертый объявляется ведьмой и отправляется на костер: I’m a web developer working in aerospace. Fuck. You create illuminated manuscripts displaying the glory of machines that fly through the air. Read On →

Трассировка описателей (AKA handle tracing)

Начиная с Windows XP в ядро встроена поддержка трассировки описателей ядра (AKA handle tracing). Включение трассировки имеет двойной эффект. Во-первых, все операции с ядерными описателями сохраняются в циклический буфер (откуда их можно потом прочитать). Во-вторых, при любой попытке использовать несуществующий описатель генерируется исключение STATUS_INVALID_HANDLE. Фактически, проверка корректности операций с описателями в Application Verifier - это тонкая обертка вокруг функций трассировки, предоставляемых ядром. Расширение отладчика !htrace - аналогично.

Read On →

Невероятно

Шаттл на улицах Лос-Анджелеса: Очень красиво!

Там, где живет интернет

Первая, как утверждается, фотосессия датацентра Google: Прямая ссылка: Where the Internet lives.

Overclocking и его последствия

А сегодня мы с вами прослушаем лекцию о том, как избежать появления растительности на ладонях и чем её потом выводить…

Разбор crash dump-ов твоего приложения, собранных с пользовательских машин - занятие и увлекательное, и поучительное. Поучительное не столько потому, что демонстрирует твои собственные успехи во всей красе, но потому что не менее красиво показывает достижения других. Одновременно испытываешь и неловкость за содеянное (нахомутал, чего уж там) и гордость (да не так уж и нахомутал - посмотрите, как другие отличились), и облегчение (все одим миром мазаны). А сегодня мы разберем одно из часто встречающихся явлений - overclocking.

Read On →

На тьму надейся, а сам не плошай

Для продукта, над которым я сейчас работаю, нужно было сделать инсталляцию под Windows. Установить несколько файлов, создать пару ключей в реестре, обновиться на более свежую версию,.. - как раз работа для WiX. WiX, - он, конечно, не без греха. Все-таки, это всего лишь обертка вокруг Windows Installer, чьё нетривиальное нутро то и дело дает о себе знать. Взять хотя-бы тот факт, что Windows Installer понимает черытех компонентный номер версии (a.b.c.d), но при сравнии номеров версий принимает во внимание только старшие три числа. Read On →

Ошибка в книге Windows Internals

В новой редакции Windows Internals обнаружился старый-знакомый баг. Там приводится пример стека 32-х битной нити, выполняющейся под Wow64: Иллюстрация сопровождается комментарием: An example of a Wow64 thread inside Microsoft Office Word 2007 is shown in Figure 5-13. The highlighted stack frame and all stack frames below it are the 32-bit stack frames from the 32-bit stack. The stack frames above the highlighted frame are on the 64-bit stack. Что не совсем верно. Read On →

Про фонетику

Существует мнение, что “в русском языке слова читаются точно так же, как и пишутся”. Ага, щас! Вы пробовали своего ребенка учить читать? “Карова”. Нет, доченька. Пишеться “о”, но читается “а”. Почему? Гм. Ну, как тебе объяснить?.. А мама говорит “корова”? Просто мама говорит по-украински, а там нет правила про безударную “о”. С кем это я сейчас говорил? Не обращай внимания, просто запомни - у папы “карова”, а у мамы - “корова”. Read On →