Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Norman4eg
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 6
#1

Поля MZ файла - C++

12.06.2012, 03:04. Просмотров 664. Ответов 6
Метки нет (Все метки)

Добрыдень. У меня стоит задача разработать линковщик, который формирует MZ файлы и, сколько бы я не гуглил, повсюду натыкаюсь лишь на описание полей загловка данного файла. Мало того, что это наверняка далеко не всё содержимое данного файла, дак еще и не могу понять как заполняются поля данного заголовка имея изначально объектный файл. В данной теме мне хотелось бы раскрыть суть хотя бы второго вопроса. Итак, по порядку :
1. Количество байт в последней странице файла MZ-формата. Равно остатку от деления длины файла на значение 512.
2. Длина файла MZ-формата в 512-байтных страницах
Вопрос: как, уже на этапе формирования заголовка, узнать объем исполнительного файла?
3. Количество элементов в таблице размещения.
Вопрос: Со словосочетание "таблица размещения" у меня ассоциируется только FAT. Что вообще подразумевает это поле? Еще натыкался на определение "Количество элементов в таблице расположения сегментов". Значит ли это что в данном поле нужно просто указать количество сегментов в программе?
4. Длина заголовка в параграфах.
Вопрос: Здесь вроде всё просто, но непонятно зачем нужно это поле, если под каждое поле заголовка выделен фиксированный объем (2 байта). Или речь идет НЕ о заголовке MZ-файла?
5. Минимальное количество дополнительных параграфов, необходимых для исполнения программы.
6. Максимальное количество дополнительных парагра-фов, необходимых для исполнения программы.
Вопрос: Стыдно признаться, но даже никогда не задумывался о том, какой объем памяти запрашивает программа, опять же не понятно как узнать это на этапе формирования заголовка (Есть ли записи об этом в объектном файле?)
7. Начальное значение, загружаемое в регистр ss.
8. Начальное значение, загружаемое в регистр sp.
Вопрос: Собственно откуда брать эти значения? Понятно если в самом объектнике присутствует информация об этом, но для разработки своего компилятора объектных файлов у меня был достаточно простой пример без участия данных регистров в коде.
9. 0 или поразрядная дополненная контрольная сумма всех 16-битных слов в файле, за исключением данного поля.
Вопрос: Опять что-то из рубрики волшебных чисел. Не понимаю я как на этапе формирования заголовка получить такие данные.
10. Значение, загружаемое в регистр ip во время загрузки программы в память.
11. Значение, загружаемое в регистр cs во время загрузки программы в память (формируется загрузчиком)
Вопрос: здесь ВРОДЕ всё понятно. Но поправьте, если ошибаюсь: я вычисляю смещение, после которого началинается кодовый сегмент и записываю в CS, а в IP, я так понимаю, ничего кроме нулевого смещения быть не должно при загрузке программы?
12. Смещение от начала файла таблицы размещения или значение 40h.
Вопрос: если понимать таблицу размещения, как таблицу описания сегментов, то видимо просто указатель на то место в объектнике, где эта таблица содержится?
13. Номер оверлейного модуля.
Вопрос: совсем непонятно.
Пожалуйста только без домыслов, ато я и без этого запутался до невозможности..)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2012, 03:04     Поля MZ файла
Посмотрите здесь:

Считать строку из файла и разбить ее на поля - C++
нужно считать из файла строки, каждая строка представляет собой набор типо имя дата описание, так вот нужно (имя дата описание )...

Чтение определенного поля в строке из файла - C++
Всем привет. Вопрос следующий: Есть файл, в нем строки, нужно его открыть и считать определенную часть строки. Строка в файле...

Вывести данные из файла, заданные в виде битового поля - C++
Задание, вывести данные из нескольких первых строк файла, причем эти данные должны быть заданны в виде битового поля. Какие форматы имеют...

Можно ли считывать поля класса из двоичного файла одним fread - C++
Можно ли считывать поля класса из двоичного файла одним fread? fread(this, sizeof(*this), 1, myFile); Слышал, что компиляторы по...

Чтение из файла определенного поля без записи в буфер предыдущих полей - C++
как на чистом си считать конкретное поле при этом не заводить переменные. формат такой: %d %s %c %d ..... если использовать...

Копировать значение поля m_moo в значение поля m_moo класса foo - C++
А что означает запись? Foo1(Foo1 const& foo):m_moo(foo.moo) то что это к.копирования понятно.Не понятно,зачем список инициализации.... ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
22458 / 10863 / 1769
Регистрация: 12.02.2012
Сообщений: 17,990
12.06.2012, 10:15     Поля MZ файла #2
А для какой системы ты делаешь линкер? Для DOS или Win? Если для Win - ищи структуру PE-заголовка. Без нее - нечего даже пытаться. Таблица размещения - это отнюдь не FAT. Это таблица, содержащая поля исполняемого модуля, которые нужно модифицировать в зависимости от места загрузки. Посмотри вот здесь: http://www.helloworld.ru/texts/comp/.../syst/lek6.htm
Norman4eg
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 6
12.06.2012, 19:18  [ТС]     Поля MZ файла #3
Catstail, спасибо за ответ. У меня не стоит задачи разработать линкер для определенной системы. Мне нужно получить линкер, который просто делает exe-файл, запуск исполнительного файла не обязателен, достаточно получить правильный дамп. Не обязательно MZ, но мне показалось, что это наиболее простой вариант. А таблица размещения - это PSP (Program Segment Prefix) или что? Просто для меня такая теория как "поля исполняемого модуля" просачивается как вода в песок, мне оно плохо дается к пониманию) Спасибо за ссылку, но даже в ней я не вижу ответа на те вопросы, которые привел тут.
Catstail
Модератор
22458 / 10863 / 1769
Регистрация: 12.02.2012
Сообщений: 17,990
12.06.2012, 21:12     Поля MZ файла #4
Нет. PSP - это префикс сегмента программы. Таблица перемещений - это другое. Кстати, она не в каждом модуле встречается.
Norman4eg
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 6
12.06.2012, 23:35  [ТС]     Поля MZ файла #5
Быть может мне лучше переадресовать эти вопросы в какой-нибудь другой раздел форума? Просто я не очень ориентируюсь)
Catstail
Модератор
22458 / 10863 / 1769
Регистрация: 12.02.2012
Сообщений: 17,990
13.06.2012, 14:11     Поля MZ файла #6
Сначала советую хорошенько изучить структуру EXE-файла. Материалов на эту тему море.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 15:43     Поля MZ файла
Еще ссылки по теме:

Сформировать два текстовых файла из целых чисел. Записать в третий файл минимальный элемент первого файла и максимальный элемент второго файла - C++
Тема: работа с текстовыми файлами с использованием стандартных функций библиотеки stdio.h Нужно составить программу: Сформировать два...

Зависимые поля (список значений одного поля зависит от значения другого поля) - MS Access
Здравствуйте, Уважаемые участники форума, изучив множество подобных вопросов на разных форумах, не смог найти для себя нужный вариант....

Как связать между собой два поля (список значений одного поля зависит от значения другого поля) - MS Access
Есть таблица: предмет, КодТипаМатериала (список), КодМатериала (список) для примера: стул, ткань, чёрное сукно ...

Открытие файла из blob-поля - C++ Builder БД
Каким образом можно открыть файл из БД поля типа "поле объекта Ole"? Я файл открываю так: ShellExecute(Handle, NULL,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Norman4eg
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 6
16.06.2012, 15:43  [ТС]     Поля MZ файла #7
Решил все же взять PE файлы. Информации по ним гораздо больше. Остался непонятым следующий момент: в заголовке PE существует указатель на начало кода. Если там простая последовательность инструкций, то всё понятно, но как быть, если присутствуют глобальные и локальные метки? (в объектном файле, к слову, локальные метки описаны сразу за телом сегмента, вопрос обстоит в том, как их правильно расположить в исполнительном)
Yandex
Объявления
16.06.2012, 15:43     Поля MZ файла
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru