Вопросы, что является самой длинной инструкцией в наборе инструкций x86? Ответ: вы можете сформировать действительную инструкцию x86 с бесконечным количеством байтов ! Правильно, вы можете заполнить полное изображение на 64 КБ одной действующей инструкцией. Чтобы быть более конкретным, нет предела длине инструкций 8086. Круто! К сожалению, современные i386-ые варианты времени бросают общую ошибку защиты при попытке декодирования инструкций длиной более 15 байт.
Итак, как выглядит бесконечно длинная, но действительная инструкция 8086? На самом деле это скучно. Вы можете сформировать бесконечно длинную инструкцию, используя избыточные префиксы спереди по кодам операций. Префиксы инструкций представляют собой байты, предварительно привязанные к началу инструкции, которая может изменять размер адреса по умолчанию, размер данных или регистры сегментов, используемые инструкцией.
Например, вы можете взять безобидный ищет команду:
89 E5 mov %sp,%bp
И превратить его в действительно длинной инструкции:
66 66 66 66 … 66 66 89 E5 mov %sp,%bp
Теперь это просто зло ,
http://onlinedisassembler.com/blog/?p=23
EDIT: еще один длинный инструкция без повторяющихся префиксов
В некоторых случаях можно кодировать действительные инструкции, которые превышают традиционные 15-байтовый предел длины. Например:
; 16-bit mode
F2 F0 36 66 67 81 84 24 disp32 imm32 = xaquire lock add [ss:esp*1+disp32],imm32
F3 F0 36 66 67 81 84 24 disp32 imm32 = xrelease lock add [ss:esp*1+disp32],imm32
; 16-bit mode
36 67 8F EA 78 12 84 24 disp32 imm32 = lwpins eax,[ss:esp*1+disp32],imm32
36 67 8F EA 78 12 8C 24 disp32 imm32 = lwpval eax,[ss:esp*1+disp32],imm32
36 67 8F EA 78 10 84 24 disp32 imm32 = bextr eax,[ss:esp*1+disp32],imm32
; 64-bit mode
64 67 8F EA F8 12 84 18 disp32 imm32 = lwpins rax,[fs:eax+ebx+disp32],imm32
64 67 8F EA F8 12 8C 18 disp32 imm32 = lwpval rax,[fs:eax+ebx+disp32],imm32
64 67 8F EA F8 10 84 18 disp32 imm32 = bextr rax,[fs:eax+ebx+disp32],imm32
http://www.sandpile.org/x86/opc_enc.htm
Спасибо. Теперь все ясно. – nullpotent