В продакшен коде есть правило avoid magic numbers. sizeof(uint16_t) указывает на сущность, за ней стоящую. 2 — ничего не значащая цифра, затрудняющая понимание кода другим человеком.
Вы правы, абсолютная защита невозможна. Но можно сильно затруднить задачу обхода защиты. Например, для обхода вышеприведенного метода обнаружения автор руткита может реализовать свой гипервизор. Чтобы детектор-гипервизор, стартующий поверх запущенного руткита-гипервизора, ничего не заподозрил, придется проэмулировать технологию виртуализации. Это почти неосуществимая задача, которая по плечу лишь большим корпорациям.
И наоборот, если руткит-гипервизор попытается запуститься при включенном детекторе-гипервизоре, то не сможет этого сделать и будет обнаружен.
В режим гипервизора (root mode) можно перейти только с нулевого кольца. Без исключений.
ec.bytePointer += 2;надо написать так:
ec.bytePointer += sizeof(uint16_t);Спасибо.
И наоборот, если руткит-гипервизор попытается запуститься при включенном детекторе-гипервизоре, то не сможет этого сделать и будет обнаружен.
В режим гипервизора (root mode) можно перейти только с нулевого кольца. Без исключений.