powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BlastFromThePast: MSDOS EXE relocation table: как пользовать.
5 сообщений из 5, страница 1 из 1
BlastFromThePast: MSDOS EXE relocation table: как пользовать.
    #34903288
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граждане, не дайте умереть!
Возникла насущная необходимость вспомнить, как загрузчик операционной системы MSDOS использует данные из relocation table заголовка MZ-EXE файла.
Нужно описание как именно он это делает.
Т.е. как используются данные из relocation table.
А то гуглю-гуглю... А за давностью лет оно уже наверное настолько потеряло актуальность, что ничего кроме формата MZ и "it does a seek to the relocation offset and does a segment fixup" найти не могу. :(
...
Рейтинг: 0 / 0
BlastFromThePast: MSDOS EXE relocation table: как пользовать.
    #34903320
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, как-то неконкретно получилось.
Исправляюсь:

1. MS-DOS: every program is linked as though it will be loaded at location zero.
2. Вот тут товарищ написал:
Поэтому при загрузке программы к каждому сегментному адресу прибавляется значение начального сегмента программы. Этот процесс и называют настройкой адресов. Для получения такой информации система использует таблицу настройки
3. Формат элементов relocation table:
Код: plaintext
1.
2.
3.
struct EXE_RELOC {
  unsigned short offset;
  unsigned short segment;
};

Вопрос: ну и чего делать-то, чтобы настройку адресов провести?
Брать 4 байта оттуда, куда элемент RT указывает (segment:offset) и прибавлять значение, которое в этих 4-х байтах содержится? (соответственно для сегмента и для офсета) Или нечто иное?
Просвятите плз...
...
Рейтинг: 0 / 0
BlastFromThePast: MSDOS EXE relocation table: как пользовать.
    #34903325
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cтранно ты как-то мыслишь... Нужно прибавлять стартовый сегмент программы к слову, записанному по адресу, указанному в relocation table. Адрес, само собой, опять же относительный.
...
Рейтинг: 0 / 0
BlastFromThePast: MSDOS EXE relocation table: как пользовать.
    #34903328
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Прочитал еще раз и понял, что почти слово в слово повторил "того товарища". Не знаю, как еще объяснить.... попробую.

Вообще прочитай про загрузчик, это понятие универсальное. Для начала представь себе плоскую модель памяти: байты нумеруются с нуля и до N. Программа компилируется так, словно она ложится в память с байта 0. Загрузчик считывает программу в ячейки X0...X1 и прибавляет X0 в каждую ячейку, в которой хранится абсолютный адрес. Relocation table - и есть список таких ячеек.

В MS-DOS адрес - двадцатибитовое значение, формирующееся из двух шестнадцатибитных: сегмента и смещения. Программа всегда грузится со смещением 0, то есть для адресации программы достаточно задать сегмент и прибавлять его к сегментной части адреса в программе.
...
Рейтинг: 0 / 0
BlastFromThePast: MSDOS EXE relocation table: как пользовать.
    #34903330
Amdei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, спасибо, теперь окончательно дошло.
Пошел спать...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BlastFromThePast: MSDOS EXE relocation table: как пользовать.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]