x86 mov код операции разборки - PullRequest
       33

x86 mov код операции разборки

2 голосов
/ 15 декабря 2011

Я встроил отладчик IDE x86, который разбирает это:

Первый случай:

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 ...
  • ... ???

1 Ответ

8 голосов
/ 15 декабря 2011

Первый является относительным RIP, а второй - абсолютным адресом.

Для перевода кодов операций см. http://www.sandpile.org. Как отметил Полином, 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 - адрес имеет формат [basereg + indexreg * stride + offset], в этом случае base и index равны 0.
  • 30 00 00 00 смещение.
...