Что означает понятие переселения?

Я новичок в сборке и поэтому хочу больше узнать о концепции перемещения.

  1. Почему именно нам нужно перемещать программы, данные?
  2. Как именно это делается?

Было бы здорово, если бы кто-нибудь мог объяснить на примере начального уровня.


person Shivaji_Vidhale    schedule 05.05.2013    source источник
comment
stackoverflow.com/questions/6002359/   -  person JosephH    schedule 05.05.2013
comment
Какова ваша практическая проблема программирования? Ваша программа не работает из-за проблем с перемещением?   -  person Raymond Chen    schedule 05.05.2013
comment
Подробный минимальный пример: stackoverflow.com/a/30507725/895245   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 22.10.2015
comment
Возможный дубликат Что делают компоновщики?   -  person bmargulies    schedule 25.09.2016


Ответы (1)


Ассемблер имеет один исходный файл для просмотра. Он должен создать образ памяти на основе этого исходного файла. Таким образом, он начинается с 0 для кода, а также с 0 для данных. Результаты попадают в объектный файл.

Теперь появляется компоновщик, которому нужно объединить множество объектных файлов в исполняемый файл (или образ ядра, или что-то еще). Это не может оставить всех на 0, они будут перекрываться. Таким образом, он должен переместить адреса, чтобы назначить ценность данных каждого объектного файла уникальному диапазону.

Затем, когда образ загружается в виртуальную память, у операционной системы могут быть веские причины использовать адрес, отличный от «0», в качестве базового виртуального адреса. Итак, во время выполнения он хочет снова все переместить.

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

person bmargulies    schedule 05.05.2013