Как шестнадцатеричные числа после инструкции перехода переводятся в адрес памяти? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть это в моем коде разборки: image of disassembly

Я вижу код инструкции перехода E9, но как числа после E9 переводятся в указанный адрес памяти?

1 Ответ

3 голосов
/ 09 апреля 2019

Байты в инструкции являются смещением, которое добавляется к адресу следующей инструкции для получения адреса назначения.

7ffbdba881c5 + 2ab125ff = 7ffc0659a7c4

Дополнительная информация о кодировании прыжков

Ближние переходы с адресатом в инструкции всегда кодируются со смещением со знаком относительно адреса следующей инструкции. В 32- или 64-битном режиме смещение может составлять 8 или 32 бита. (В 16-битном режиме это может быть 8 или 16 бит. Ближние переходы с 8-битным смещением также называются короткими переходами.) Косвенные ближние переходы имеют адрес назначения в регистре или ячейке памяти; назначение является абсолютным (значение, которое будет загружено в [ER] IP).

У дальних прыжков может быть пункт назначения либо в инструкции, либо в ячейке памяти; адресат имеет значения CS и [ER] IP.

Подробнее см. Справочник по x86, например Intel SDM, том 2. https://software.intel.com/en-us/articles/intel-sdm

...