R_386_RELATIVE
редактор ссылка создает этот тип перемещения для динамической компоновки. Его член смещения дает местоположение внутри общего объекта, который содержит значение, представляющее относительный адрес. Динамический компоновщик вычисляет соответствующий виртуальный адрес на , добавляявиртуальный адрес, по которому общий объект был загружен на относительный адрес. Записи перемещения для этого типа должны указывать 0 для индекса таблицы символов.
Это означает, что слагаемого, используемый для вычисления значения перемещаемого поля.
Б
Это означает, что базовый адрес, при котором общий объект был загружен в память во время выполнения. Как правило, общий объектный файл создается с базовым виртуальным адресом 0, но адрес выполнения будет другим.
ADDEND
Как было показано выше, только Elf32_Rela
записей содержат явных слагаемый. Записи типа `Elf32_Rel хранить неявное дополнение в том месте, которое необходимо изменить. В зависимости от архитектуры процессора одна или другая форма может быть необходимой или более удобной. Следовательно, реализация для конкретной машины может использовать одну форму исключительно или любую форму в зависимости от контекста.
Базовый адрес
Для вычисления базового адреса, один определяет адрес памяти, связанный с наименьшим значением p_vaddr
для сегмента PT_LOAD
. Затем получается базовый адрес путем усечения адреса памяти до ближайшего кратного максимального размера страницы. В зависимости от типа загружаемого файла в память адрес памяти может быть или не соответствовать значениям p_vaddr
.
Вы можете наблюдать за перемещением части файла двоичной/библиотечной информации с помощью readelf -r
.
С моей точки зрения, я думаю, что это относительно текущего IP-адреса, который является адресом ячейки памяти, где это значение будет сохранено, но у меня нет документов, чтобы это доказать. – rodrigo