Что означает отрицательный адрес в сборке? - PullRequest
1 голос
/ 25 марта 2011
0xffffffff8100b9e4: callq  *-0x7ec55ec0(,%rax,8)

Что означает *-0x7ec55ec0 здесь?

Ответы [ 3 ]

3 голосов
/ 25 марта 2011

В этом контексте -0x7ec55ec0 - это просто более короткий способ записи 0xffffffff813aa140 (другими словами, -0x7ec55ec0 + 0x10000000000000000).

Предположительно, по этому адресу есть таблица переходов, проиндексированная rax.

Если вам нужна помощь, то же самое в синтаксисе сборки Intel:

call qword ptr [0xffffffff813aa140 + rax*8]
2 голосов
/ 25 марта 2011

Нет отрицательных адресов. Адреса не подписаны.

Это означает, что вы взяли адрес с установленным старшим битом и отформатировали его как число со знаком (или использовали метод, который отформатировал его как число со знаком).

0 голосов
/ 25 марта 2011

"0x7ec55ec0" является отрицательным адресом смещение .И да, это будет вычтено из значения 8 *% rax.Это вычитание в представлении с двумя дополнениями представляет собой 64-битный беззнаковый эквивалент для добавления «0xffffffff8100b9e4».

Предположительно, значение% rax * 8 будет больше 0x7ec55ec0, так что значение в обычном диапазонерезультаты кода или сегмента данных.

Обратите внимание, что смещения адресов на платформе x86 действительно всегда подписаны (как 8-битные, так и 32-битные смещения), но результирующие адреса, конечно, без знака.

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