Re: Несколько замечаний по поводу качества кода
От: TSS_TSS http://kitrap08.blogspot.com/
Дата: 19.11.15 16:54
Оценка: 2 (1) +3
Здравствуйте, Караваев Дмитрий Юрьевич, Вы писали:

КДЮ>Статья:

КДЮ>Несколько замечаний по поводу качества кода
Автор(ы): Караваев Дмитрий Юрьевич
Дата: 10.02.2015
в статье приведено несколько примеров недостаточно эффективных команд в коде ядра Windows-XP.


КДЮ>Авторы:

КДЮ> Караваев Дмитрий Юрьевич

КДЮ>Аннотация:

КДЮ>В статье приведено несколько примеров недостаточно эффективных команд в коде ядра Windows-XP.

Но посмотрите, например, на один из бесчисленных фрагментов ядра:

4025AA 90 NOP
4025AB 90 NOP
4025AC 90 NOP
4025AD 90 NOP
4025AE 90 NOP
4025AF 8BFF MOV EDI,EDI
4025B1 55 PUSH EBP

Здесь, как и в сотнях других подобных мест, выравнивание превратилось в свою противоположность, и подпрограмма начинается из-за команд NOP как раз НЕ с адреса кратного 16 или хотя бы 4, а сами команды NOP стали просто бессмысленным раздуванием кода. Такое впечатление, что где-то в одном месте в ядре выравнивание «съехало» и далее везде дает противоположный эффект. Причем, чтобы увидеть это вовсе не требуется дисассемблировать код, достаточно любой подходящей утилитой посмотреть таблицу экспорта ядра NTOSKRNL.EXE. Там полно, например, нечетных (т.е. явно никак не выровненных) адресов входов.


Это не бессмысленное раздувание кода, а вполне себе осмысленное и имеющее название hot-patch. Mov edi, edi заменяется на short jmp, ведущий на 5 байт вверх, а этих пяти байт в свою очередь хватит, чтобы записать опкод long jmp'a.
Технологии больше десяти лет к слову. Предназначена для уменьшения(или избавления) количества ребутов (что критически важно если ОС стоит на сервере) при апдейтах.
http://kitrap08.blogspot.com/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.