Сборка - условие jmp с использованием метки - PullRequest
0 голосов
/ 19 февраля 2012

В следующем коде:

    Gloat: mov eax, 0
          jmp [(ebx*4)+Tab]
    Tab:  dd F4
          dd F3
          dd F2
          dd F1
    F1: add eax, 4
    F2: add eax, 4
    F3: add eax, 4
    F4: ret

Я не понимаю, что значит [(ebx*4)+Tab]. Например, если ebx содержит 2, что я получу при условии jmp? jmp [8+Tab], но что такое Tab?

Спасибо.

1 Ответ

4 голосов
/ 19 февраля 2012

Tab - это таблица, содержащая адреса целей перехода (F1, F2 и т. Д.), ebx * 4 выбирает запись из этой таблицы (добавляя к адресу Tab, затем разыменовывая этот адрес), который затем перескочил к.

Итак, в вашем примере, если EBX равно 2, мы получаем JMP [Tab + 8], который становится JMP F2, потому что адрес F2 составляет 8 байтов от начала Tab.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...