Точка входа исполняемого заголовка elf

почему точка входа elf 0x8048320. From Этот вопрос - это виртуальный адрес, используемый ядром операционной системы для отображения процесса. Но From This, виртуальный адрес, по которому отображается процесс (в процессоры x86) составляет 0xc0000000 (нижние 3 ГБ для пространства пользователя и верхние 1 ГБ для пространства ядра). Теперь, какова теория этого адреса начальной точки 0x8048320. Разве это не должно быть 0c0000000h ??

С уважением,


person Aimal    schedule 16.06.2017    source источник
comment
Точка входа из заголовка эльфа: readelf -h a.out   -  person Aimal    schedule 16.06.2017
comment


Ответы (1)


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

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

В вашем примере 0x8048320 базовый адрес, вероятно, будет 0x8000000, а смещение _start будет 0x48320.

Однако в моей машине:

$ readelf -h /usr/bin/ls | grep Entry
Entry point address:               0x404030

Все эти виртуальные адреса обычно определяются компилятором и / или компоновщиком.

person rodrigo    schedule 16.06.2017