Nasarus wrote:
А зачем, собственно, нужно было переключение регистров?
хороший вопрос пытливого человека! Поздравляю!
Nasarus wrote:
Понятно. Какая-то финская традиция

Ну наверное не совсем так. Вернее будет совсем не так если покумекать. Ну давай типа я тебе свое кумеканье изложу, думаю, будет полезно.
Смотри.
Разработчик, особенно ядра и всяких ядрёных и около ядрёных фенечек, может столкнуться, а вернее сказать, постоянно сталкивается
с проблемами в области "сердца системы". Следовательно нужно иметь инфу, чтобы разобраться, где да что. Дебаггер(ы), логи, дампы непременные спутники этого трудного пути разбирательств. Естественно, чем лучше и качественнее инфа, да еще если так сказать "на заказ"

да внужном месте (в интересующем API стыке например) то эти сладости понятны. А вот если нет ничего? Если только, только возводится ядро или
зона глюков приблизительна? Тогда хоть какой то программерский финт, уловка, ухищрение, могут сослужить незаменимую службу. А если он(а) этот финт оправдал несколько раз задумку автора, то, пожалуй она может остаться надолго и в ядре, скажем. Особенно если он(а) "карман не тянет", а работы впереди еще и края не намечается. И еще.
Автор, выкладывая исходники, пусть даже открытого проекта, может (ИМЕЕТ ПОЛНОЕ ПРАВО) НЕ ВЫКЛАДЫВАТЬ СВОИ ОТЛАДОЧНЫЕ технологии, модули, объекты, вспомогательные проги, среды... да что там говорить, комментарии!
Ведь это его мысли вслух! Порой, разгадка даже самому себе (через год-два) хода мысли дальше, зачем именно тут и так вот и так накодил тут именно, что хотел дочтичь, чего искал собственно(баг).....
Так вот, если это для него есть ценная инфа, а порой оно и бывает или это может подсказать конкурентам решение проблемы (ипр. и т.п.),
то....
комменты ЧИСТЯТСЯ,
т.е. удаляются либо совсем (возьми сорцы FASM полистай и подумай о стиле и табуляциях текста, например....) либо частично.
Сделать это сам понимаешь, как

2 байта.... обнулить.
Пишется прожка (парсер это слишком громко

), которая ищет символ ";" и удаляет весь остаток строки до 0Dh, 0Ah в листинге
любых сорцов типа
asm в данном случае.
Как на автора бочку не гони, но он завсегда прав получается и перед законом и перед людьми, ибо он АВТОР. Это всегда НАДО иметь ввиду, полезно.
НУ теперь код смотрим
Code:
cross_order:
; load all registers in crossed order
mov eax, ebx
mov ebx, ecx
mov ecx, edx
mov edx, esi
mov esi, edi
movzx edi, byte[esp+28 + 4]
call dword [servetable+edi*4]
ret
что видим? Ротацию видим. Что она дает кодеру если скажем мы имеем возможность мониторить(пусть просто смотреть вызовы) регистры
в некоторой точке памяти [servetable+edi*4]?
Кое что нужное да имеем! Можем с этого поиметь.
Ву вот залетаем мы сюда часто несанкционированно типа, циклимся непонятно откуда пусть и допустим именно на метку
cross_order:Тогда мониторинг покажет ротацию, сдвиг. Как это выглядит?
ПУсть был EAX = 0x66. Тогда логично, что в [servetable+edi*4] мы имеем EBX = 0x66 и это верно.
А если затем, сразу, "видим" еще вызов и еще и еще.... и уже ESI = 0x66......???
вот тебе простенькая типа фенечка. Глупо? Быть может и так, только, как именно думал автор и почему именно так, где то в 2003 году мы сейчас вряд ли узнаем...
Но уметь читать между строк всегда полезно, я так думаю.
