В связи, какова разница между адресами времени выполнения и адресами в разделе .text (машинный код) перемещаемого объектного файла? - PullRequest
0 голосов
/ 06 октября 2019

Я изучаю линковку прямо сейчас (самоучка), и у меня возникли некоторые проблемы с пониманием некоторых концепций.

После предварительной обработки, компиляции и сборки файла исходного кода вы получили перемещаемый объектфайл в формате ELF (WLOG). В этом файле ____. O есть раздел .text, содержащий машинный код отдельного исходного кода.

Соответствует ли этот машинный код адресам времени выполнения кода, который находится во входном файле? Например, если машинный код, куда нужно запускать (при условии отсутствия неразрешенных внешних ссылок), будет ли профиль времени выполнения кода соответствовать машинному коду здесь?

Если это правда, можно ли с уверенностью сказать, что ссылки на символы в этом кодеуказывают на адрес времени выполнения их соответствующих символов?

Мне нужно знать это, чтобы я мог лучше понять процесс связывания, который происходит непосредственно после этого процесса.

1 Ответ

1 голос
/ 06 октября 2019

Соответствует ли этот машинный код адресам времени выполнения кода, который находится во входном файле?

Нет.

Не может, потому чтокод в одном .o файле не не знает, какие другие объектные файлы будут связаны с основным исполняемым файлом. Представьте себе foo.o со словами «Я хочу быть по адресу 0x123000» и bar.o со словами «Я хочу быть по адресу 0x123004». Они явно не могут быть по одному адресу.

«Окончательные» адреса времени выполнения определяются компоновщиком , который собирает все различные файлы .o, разрешает ссылки между нимии выкладывает последний исполняемый файл в память. (Даже это не полная история, так как совместно используемые библиотеки и независимые от позиции исполняемые файлы усложняют ответ.)

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