2011-12-15 81 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的偏移量。