Сборка (,% eax, 4)

Если одна из моих командных строк говорит:

jmp   *0x804a180(,%eax,4)

что это обозначает? Я спрашиваю конкретно, потому что перед первой запятой нет значения, и я точно не знаю, что означает * перед адресом.

 harold19 окт. 2012 г., 19:33
Без обид, но спрашивать ТАК, что все значит, не масштабируемо. Я знаю, что синтаксис AT & T глуп и запутан, но он также четко задокументирован на нескольких сайтах.

Ответы на вопрос(1)

Решение Вопроса

значение которого находится по адресу, рассчитанному как%eax * 4 + 0x804a180.

* используется в синтаксисе AT & T для указания косвенных переходов и вызовов. Это в основном означает «перейти к месту, указанному этим, а не к значению этого». Полезно различать следующие инструкции:

jmp myAddress  # Jumps to the location myAddress
jmp *myPointer # Jumps to the location contained at myPointer

Что касается пустого значения, оно рассматривается как 0. Полная форма адресации AT & Toffset(%base, %index, multiplier), но любое из этих значений может быть опущено. Значение по умолчанию для каждого, кроме множителя (по умолчанию 1), равно 0. Большую часть времени вы можете просто не указывать их, но если у вас есть индекс и нет базы, вам нужна запятая, чтобы ассемблер мог определить, какой это.

 arc19 окт. 2012 г., 21:02
Большое спасибо!

Ваш ответ на вопрос