Например:
0xa1 : ['MOV', 'rAX,Ov']
Согласно Intel® 64 and IA-32 Architectures Developer's Manual: Combined Volumes Таблица A-2 , Однобайтная карта Opcode: (00H - F7H) 0xa1
- mov rAX, Ov
.
Тогда таблица А.2.1 Коды для адресации Метод объясняет аббревиатуры, используемые в адресации:
O The instruction has no ModR/M byte. The offset of the operand is coded as
a word or double word (depending on address size attribute) in the instruction.
No base register, index register, or scaling factor can be applied (for example,
MOV (A0–A3)).
Таблица А.2.2 Коды для Операнд Тип объясняет тип операнда:
v Word, doubleword or quadword (in 64-bit mode), depending on operand-size
attribute.
и ниже A.2.3 Коды регистраций:
A register identifier of the form eXX or rXX is used when register width depends
on the operand-size attribute. eXX is used when 16 or 32-bit sizes are possible;
rXX is used when 16, 32, or 64-bit sizes are possible. For example: eAX indicates
that the AX register is used when the operand-size attribute is 16 and the EAX
register is used when the operand-size attribute is 32. rAX can indicate AX, EAX
or RAX.
Итак, вот несколько примеров инструкции en кодировки для 0xa1
опкода (подтверждены udcli -x
):
a10102 mov ax, [0x201] ; in x86 16-bit code
a101020304 mov eax, [0x4030201] ; in x86 32-bit code
a10102030405060708 mov eax, [0x807060504030201] ; in x86-64
66a101020304 mov ax, [0x4030201] ; with 0x66, in x86 32-bit code
66a10102030405060708 mov ax, [0x807060504030201] ; with 0x66, in x86-64
48a10102030405060708 mov rax, [0x807060504030201] ; with 0x48 REX.W, in x86-64
+1 Спасибо большого 'инструмента и примеры udcli -x'! Это имеет смысл. :) – xersi