Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014- СП 3.0 ЛАБЫ ОБЯЗАТ.doc
Скачиваний:
102
Добавлен:
01.03.2016
Размер:
896 Кб
Скачать
      1. Неразрешённые внешние ссылки

При переводе команд исходного текста в машинный (объектный) числовой код всё время встречается проблема неопределённости адресов чтения-записи данных и адресов передачи управления (если программист запрограммировал такие передачи, например, в программе имеются вызовы процедур или условные и безусловные переходы).

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

(Продолжая приведенную выше строительную аналогию про сборный коттедж, можно привести простой пример. На чердаке коттеджа запланирован отопительный водогрейный котёл. Можно ли при изготовлении модуля чердака сразу сказать, сколько метров трубы нужно для соединения этого котла с местом ввода воды в дом? Любой строитель рассмеётся в ответ: «Позвольте – скажет он – как мы можем знать, где на стройплощадке каждого покупателя нашего сборного коттеджа будет ввод воды?! У одного он прямо возле дома, а у другого за 100 метров. Трубы отмеряются «по месту» прямо на стройплощадке, когда коттедж уже установлен и собран». В этом примере неизвестная длина трубы – это и есть аналогия пока неизвестного «адреса доставки воды к котлу». Проектировщик будет писать проектную ведомость заказа материалов и в строчке «труба для подвода воды» в графе «длина» он поставит… Что? Правильно, НИЧЕГО. Графа останется пустой. И вот эта пустая (или заполненная пока нулём) графа - это и есть «неразрешённая внешняя ссылка» в проекте.)

Но невозможность определить значение адреса не мешает зарезервировать под него место в объектном коде, что и делается. Ведь известно, что адрес занимает 4 байта (32 бита), эти байты и резервируются. Для определенности их нужно чем-то заполнить. В простейших случаях заполняют нулями, но можно туда поместить и какую-нибудь полезную на будущее информацию, к примеру, смещение адреса чтения (записи) относительно базовой метки. Такие поля в объектном коде и называются «неразрешённые внешние ссылки». Слово «неразрешённые» здесь означает не «запрещенные», а скорее «не получившие окончательного решения», то есть попросту «недовычисленные».

Эта недовычисленность ссылок имеет место только в объектном файле. Именно поэтому объектные файлы и являются промежуточнойформой преобразования данных при создании программы. Когда компоновщик собирает исполняемый модуль из секций объектного файла, то он вписывает в поля неразрешённых ссылок правильные действительные адреса. Но подробнее об этом – в следующей лабораторной работе.

    1. Выполнение работы

Если охарактеризовать кратко суть выполняемой здесь работы, то её можно назвать “reverse engeneering”, то есть «обратная разработка». Это такая работа, в которой по имеющемуся файлу, созданному [пока] непонятно как, восстанавливается (хотя бы в основных частях) его внутренняя структура и, таким образом, составляется обоснованное мнение о назначении файла и способах его дальнейшего использования. Именно это мы должны проделать с объектным файлом формата COFF (Common Object File Format).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]