Путеводитель по написанию вирусов под Win32

         

Советы и приемы


Здесь я поместил нерасклассифированные приемы оптимизирования и те, которые (как я предполагаю) вы уже знаете ;).

  • Никогда не используйте директиву JUMPS в вашем коде.
  • Используйте строковые операции (MOVS, SCAS, CMPS, STOS, LODS).
  • Используйте 'LEA reg, [ebp+imm32]' вместо 'MOV reg, offset imm32 / add reg, ebp'.
  • Пусть ваш ассемблер осуществляет несколько проходов по коду (в TASM'е /m5 будет достаточно хорошо).
  • Используйте стек и избегайте использования переменных.
  • Многие операции (особенно логические) оптимизированны для регистра EAX/AL
  • Используйте CDQ, чтобы очистить EDX, если EAX меньше 80000000h (т.е. без знака).
  • Используйте 'XOR reg,reg' или 'SUB reg,reg', чтобы сделать регистр равным нулю.
  • Использование EBP и ESP в качестве индекса тратит на 1 байт больше, чем использование EDI, ESI и т.п.
  • Для битовых операций используйте "семейство" BT (BT,BSR,BSF,BTR,BTF,BTS).
  • Используйте XCHG вместо MV, если порядок регистров не играет роли.
  • Во время push'инга все значение структуры IOREQ, используйте цикл.
  • Используйте кучу настолько, насколько это возможно (адреса API-функций, временные переменные и т.д.)
  • Если вам нравится, используйте условные MOV'ы (CMOVs), но они 586+.
  • Если вы знаете как, используйте сопроцессор (его стек, например).
  • Используйте семейство опкодов SET в качестве семафоров.
  • Используйте VxDJmp вместо VxDCall для вызова IFSMgr_Ring0_FileIO (ret не требуется).



Содержание раздела