x86 mov操作码反汇编

GJ.*_*GJ. 2 debugging x86 assembly x86-64 disassembly

我内置了IDE x86 debbuger,它拆解了这个:

第一种情况:

65 48 8B 05 30 00 00 00
mov rax,gs:[rel $00000030]
Run Code Online (Sandbox Code Playgroud)

第二种情况:

65 48 8B 04 25 30 00 00 00
mov rax,gs:[+$0030]
Run Code Online (Sandbox Code Playgroud)

有什么不同?

我怀疑拆解有问题,但无法转换上层操作码.

我所知道的是:

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

Gun*_*iez 8

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

有关操作码的翻译,请参阅http://www.sandpile.org.正如Polynomial指出的那样,http: //ref.x86asm.net 甚至更好,但目前还不支持AVX或XOP.

  • 8B- 操作码 - 给出为mov Gv, Ev,其中Gv表示寄存器目标,其中Ev是ar/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 - sib - address的格式为[basereg + indexreg*stride + offset],在这种情况下,base和index都是0.
  • 30 00 00 00 抵消.