搜了一下
In theory, by adding all appropriate prefix bytes you can obtain an
instruction that is up to 16 bytes long. However, the x86 will generate
an exception if the instruction length exceeds 15 bytes.
The longest x86 instruction is 15 bytes in 16-bit mode and 13 bytes in
32-bit mode:
[16-bit]
66 67 F0 3E 81 04 4E 01234567 89ABCDEF
add [ds:esi+ecx*2+0x67452301], 0xEFCDAB89
[32-bit]
F0 3E 81 04 4E 01234567 89ABCDEF
add [ds:esi+ecx*2+0x67452301], 0xEFCDAB89
11字节的指令加前缀就是了,可以加到15字节,再长就有异常了,段超越可以加多个,比如:
3E 3E 3E 3E 81 84 4E 67 45 23 01 ef cd ab 89
一些工具反汇的结果可能不正正确,显示前3个3E为非法指令,但实际它是合法的。
楼上的指令一定会异常,因为MOV不支持LOCK前缀。