我内置了IDE x86 debbuger,它拆解了这个:
第一种情况:
65 48 8B 05 30 00 00 00
mov rax,gs:[rel $00000030]
第二种情况:
65 48 8B 04 25 30 00 00 00
mov rax,gs:[+$0030]
有什么区别?
我怀疑反汇编有问题,但不能翻译上操作码。
我所知道的是:
65
是gs
前缀48
是REX.W
前缀8B
是mov
... 答案 0 :(得分:8)
第一个是RIP相对,第二个是绝对地址。
有关操作码的翻译,请参阅http://www.sandpile.org。 正如Polynomial指出的那样,http://ref.x86asm.net甚至更好,但目前不支持AVX或XOP。
8B
- 操作码 - 以mov Gv, Ev
给出,其中Gv表示寄存器目标,其中Ev是r / m目的地。 05
- mod r / m - 将rax
表示为目标,rip
相对为有效地址30 00 00 00
偏移到rip
第二个:
8B
- 操作码 - 以mov Gv, Ev
给出,其中Gv表示寄存器目标,其中Ev是r / m目的地。 04
- mod r / m - 表示rax
为目标,sib
为有效地址25
- sib - address的格式为[basereg + indexreg * stride + offset],在这种情况下,base和index都是0。30 00 00 00
抵消。