Системное программное обеспечение персональных ЭВМ


Пример 3 - часть 2


Таблица перемещений может располагаться сразу вслед за форматированной частью заголовка, тогда ее смещение - 0x1C, но конкретные компоновщики могут располагать перед таблицей еще некоторую собственную специфическую информацию. Таблица состоит из 4-байтных элементов, в каждом из которых записано расположение в коде программы слова, содержащего обращение к адресу логического сегмента и, следовательно, требующее настройки на абсолютный адрес (в примере 11.4 - struct ReloItem). При загрузке программы DOS определяет сегментный адрес ее начала (стартовый адрес) как PID + 0x10 и далее ко всем словам программного кода, которые адресуются таблицей перемещений, прибавляет этот адрес. Результаты этой работы DOS иллюстрируются примером 11.4. Эта программа, как и предыдущая, находит свой EXE-файл и считывает его заголовок. Зная адрес своего PSP, программа вычисляет стартовый сегментный адрес, затем находит в EXE-файле начало таблицы перемещений и поэлементно читает ее. Для каждого элемента таблицы перемещений программа находит слово, которое этот элемент адресует - в оперативной памяти и в EXE-файле - и выводит на экран оба варианта этого слова (для контроля выводятся также по 4 байта до и после этого слова). Во всех случаях разность между значениями этого слова в памяти и в файле будет равна стартовому сегментному адресу.




- Начало -  - Назад -  - Вперед -