2011-12-15 69 views
2

我已经建立了IDE 86 debbuger其拆解此:86 MOV操作码折卸

第一种情况:

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] 

的区别是什么?

我怀疑反汇编出了问题,但无法翻译上面的操作码。

我所知道的是:

  • 65gs前缀
  • 48REX.W前缀
  • 8Bmov ...
  • ... ???
+0

what is ide – sehe 2011-12-15 10:57:11

+0

@sehe:Delphi XE2 IDE – 2011-12-15 11:55:33

回答

8

第一个是RIP相对的,第二个是绝对地址。

关于操作码的翻译,请参阅http://www.sandpile.org。 由于多项式指出,http://ref.x86asm.net甚至更​​好,但目前不支持AVX或XOP。

  • 8B - 操作码 - 被给定为mov Gv, Ev,其中提起笔指示寄存器目标,其中EV是R/M的目的地。
  • 05 - MOD R/M - 表示rax作为靶,用rip相对作为有效地址
  • 30 00 00 00偏移到rip

第二个:

  • 8B - 操作码 - 被给定为mov Gv, Ev,其中Gv表示寄存器目标,其中Ev是ar/m目的地。
  • 04 - MOD R/M - 表示rax作为靶,用sib作为有效地址
  • 25 - 同胞 - 地址是在格式[basereg + indexreg *步幅+偏移],在这种情况下,两个基和指数是0
  • 30 00 00 00的偏移量。