
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
30.10.2007, 00:43
|
|||
|---|---|---|---|
BlastFromThePast: MSDOS EXE relocation table: как пользовать. |
|||
|
#18+
Граждане, не дайте умереть! Возникла насущная необходимость вспомнить, как загрузчик операционной системы MSDOS использует данные из relocation table заголовка MZ-EXE файла. Нужно описание как именно он это делает. Т.е. как используются данные из relocation table. А то гуглю-гуглю... А за давностью лет оно уже наверное настолько потеряло актуальность, что ничего кроме формата MZ и "it does a seek to the relocation offset and does a segment fixup" найти не могу. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 01:26
|
|||
|---|---|---|---|
BlastFromThePast: MSDOS EXE relocation table: как пользовать. |
|||
|
#18+
Ладно, как-то неконкретно получилось. Исправляюсь: 1. MS-DOS: every program is linked as though it will be loaded at location zero. 2. Вот тут товарищ написал: Поэтому при загрузке программы к каждому сегментному адресу прибавляется значение начального сегмента программы. Этот процесс и называют настройкой адресов. Для получения такой информации система использует таблицу настройки 3. Формат элементов relocation table: Код: plaintext 1. 2. 3. Вопрос: ну и чего делать-то, чтобы настройку адресов провести? Брать 4 байта оттуда, куда элемент RT указывает (segment:offset) и прибавлять значение, которое в этих 4-х байтах содержится? (соответственно для сегмента и для офсета) Или нечто иное? Просвятите плз... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 01:32
|
|||
|---|---|---|---|
BlastFromThePast: MSDOS EXE relocation table: как пользовать. |
|||
|
#18+
Cтранно ты как-то мыслишь... Нужно прибавлять стартовый сегмент программы к слову, записанному по адресу, указанному в relocation table. Адрес, само собой, опять же относительный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
30.10.2007, 01:37
|
|||
|---|---|---|---|
BlastFromThePast: MSDOS EXE relocation table: как пользовать. |
|||
|
#18+
P.S. Прочитал еще раз и понял, что почти слово в слово повторил "того товарища". Не знаю, как еще объяснить.... попробую. Вообще прочитай про загрузчик, это понятие универсальное. Для начала представь себе плоскую модель памяти: байты нумеруются с нуля и до N. Программа компилируется так, словно она ложится в память с байта 0. Загрузчик считывает программу в ячейки X0...X1 и прибавляет X0 в каждую ячейку, в которой хранится абсолютный адрес. Relocation table - и есть список таких ячеек. В MS-DOS адрес - двадцатибитовое значение, формирующееся из двух шестнадцатибитных: сегмента и смещения. Программа всегда грузится со смещением 0, то есть для адресации программы достаточно задать сегмент и прибавлять его к сегментной части адреса в программе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=16&mobile=1&tid=1345746]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 478ms |

| 0 / 0 |
