У меня есть команда абсолютного косвенного перехода на компьютере x86:
ff 24 25 30 10 60 00
который был сгенерирован из:
jmp *bar
но у меня проблемы с декодированием второго и третьего байта.
Вторым должно быть поле Mod R / M. Так что это означает:
00 100 100
значение:
00
- память без смещения (но имеет постоянный адрес, не так ли это смещение?)
100
(дек. 4) - расширенный op. код (FF / 4 => JMP r / m32)
100
- ?? SIB? но в этой инструкции регистр не используется
P.S. некоторый контекст:
Breakpoint 4, test () at test.s:13
13 jmp *bar
(gdb) disassemble /r
Dump of assembler code for function test:
0x000000000040051b <+0>: c7 04 25 30 10 60 00 2f 05 40 00 movl $0x40052f,0x601030
=> 0x0000000000400526 <+11>: ff 24 25 30 10 60 00 jmpq *0x601030
0x000000000040052d <+18>: 87 c0 xchg %eax,%eax
0x000000000040052f <+20>: c3 retq
End of assembler dump.
(gdb) list
8 bar: .word 0x0
9 .text
10 test:
11 .LFB0:
12 movl $label1, bar
13 jmp *bar
14 xchg %eax, %eax
15 label1:
16 ret
17 .LFE0:
(gdb)