Почему печать адреса переменной во время выполнения дает значение, отличное от местоположения этой переменной в исполняеLinux

Ответить
Anonymous
 Почему печать адреса переменной во время выполнения дает значение, отличное от местоположения этой переменной в исполняе

Сообщение Anonymous »

Когда я печатаю адрес переменной с помощью %p, я получаю очень большое 12-значное шестнадцатеричное значение. Однако, когда я смотрю на фактическую структуру моего исполняемого файла с помощью objdump, переменная имеет гораздо меньшее 4-значное шестнадцатеричное значение. Почему это?
Я почти уверен, что больший адрес не является физическим адресом переменной, поскольку она выполняется в пользовательском пространстве и определенно не должна иметь доступа к физическим адресам. . Для этого я также отключил ASLR, поэтому большой адрес — это не просто результат рандомизации.

Код: Выделить всё

#include 
#include 

static int testInt = 5;

int main() {
printf("address of testInt: %p\n", (void*)&testInt);

return 0;
}
Когда я запускаю это, он печатает адрес 0x555555558010 для testInt. Однако, согласно objdump, testInt расположен в байте 0000000000004010.

Подробнее здесь: https://stackoverflow.com/questions/792 ... -from-that
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»