lis*_*reg 2 assembly x86-64 gnu-assembler att
我在x86机器上有以下绝对间接跳转指令:
ff 24 25 30 10 60 00
产生于:
jmp *bar
但是我在解码它的第二个和第三个字节时遇到了麻烦。
第二个应该是Mod R / M字段。因此它翻译为:
00 100 100
含义:
00
-没有位移的内存(但是它具有恒定的地址,这不是“位移”吗?)
100
(12月4日)-扩展操作。代码(FF / 4 => JMP r / m32)
100
-?? SIB?但是该指令中没有使用寄存器
PS一些上下文:
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)
Run Code Online (Sandbox Code Playgroud)
操作数字节24 25
表示具有32位位移的绝对寻址模式,即没有基址寄存器也没有索引寄存器。在64位模式下,这与相对寻址模式不同,相对寻址模式以modr / m字节表示25
(但在32位模式下则不是)。如果要使用后一种寻址模式,请jmp *bar(%rip)
使用AT&T语法编写。
归档时间: |
|
查看次数: |
84 次 |
最近记录: |