Как в этом случае работает инструкция jmp в сборке att
Я сейчас перебираю функцию в сборке AT&T и не могу понять, как работает эта конкретная команда jmp.
jmp *0x804a140(,%eax,4)
Как именно он использует регистр%eax и 4 с инструкцией перехода? Я никогда не видел, чтобы jmp использовал этот способ раньше.
1 ответ
Решение
Если вас смущает синтаксис at&t, переключите инструмент в режим Intel.
Эффективный адрес, который вы видите, не является специфическим для переходов, вы могли столкнуться с ним с любой инструкцией, которая принимает операнд памяти.
В синтаксисе Intel это будет выглядеть так: jmp [0x804a140 + 4 * eax]
, Это косвенный переход, который выбирает цель перехода с адреса памяти 0x804a140 + 4 * eax
, Вероятно, это элемент в так называемой таблице переходов.