Как в этом случае работает инструкция jmp в сборке att

Я сейчас перебираю функцию в сборке AT&T и не могу понять, как работает эта конкретная команда jmp.

    jmp    *0x804a140(,%eax,4)

Как именно он использует регистр%eax и 4 с инструкцией перехода? Я никогда не видел, чтобы jmp использовал этот способ раньше.

1 ответ

Решение

Если вас смущает синтаксис at&t, переключите инструмент в режим Intel.

Эффективный адрес, который вы видите, не является специфическим для переходов, вы могли столкнуться с ним с любой инструкцией, которая принимает операнд памяти.

В синтаксисе Intel это будет выглядеть так: jmp [0x804a140 + 4 * eax], Это косвенный переход, который выбирает цель перехода с адреса памяти 0x804a140 + 4 * eax, Вероятно, это элемент в так называемой таблице переходов.

Другие вопросы по тегам