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

КДЮ>Статья:

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


КДЮ>Авторы:

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

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

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

Встречаются и такие конструкции:

IoFreeIrp:
414012 8BFF MOV EDI,EDI
414014 55 PUSH EBP
414015 8BEC MOV EBP,ESP
414017 5D POP EBP
414018 FF258C474800 JMP D PTR [0048478C]

IoAllocateIrp:
41406D 8BFF MOV EDI,EDI
41406F 55 PUSH EBP
414070 8BEC MOV EBP,ESP
414072 5D POP EBP
414073 FF2588474800 JMP D PTR [00484788]

Эти фрагменты вызывают в памяти анекдот про двух человек, один из которых выкапывал ямы, а второй шел за ним и закапывал. Согласно анекдоту должен был быть еще и третий, который бы сажал деревья, но он не пришел. Здесь выполняется пролог подпрограммы, а затем сразу эпилог. Возможно, в исходном тексте находится какой-то закомментированный фрагмент и это дает такой эффект. Возможно, это было сделано для каких-то отладочных остановок. Но как бы то не было, каждый раз, когда происходит обращение к подпрограммам IoAllocateIrp и IoFreeIrp, сначала выполняются бессмысленные команды.


Эти две функции объявлены как NTKERNELAPI(DECLSPEC_IMPORT), поэтому генерация пролога для них это необходимость соблюдения стандартов(и да, это идет в ущерб оптимизации). А mov edi, edi — место для hotpatch'a.
Поэтому никаких бессмысленных команд тут нет.
http://kitrap08.blogspot.com/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.