CP1251 code page document.

 

Technical support e-mail : mktmk<at>narod.ru.

Home page                       : http://mktmk.narod.ru.

 

 

                        Конвертор exe файлов

                        Описание применения

                              v1.00

 

                            Аннотация

 

   В документе описан порядок применения программы конвертации DOS-exe

(MZ формат) файлов в формат, пригодный для загрузки по абсолютным адресам в ПЗУ

(rom). Для этого вся сегментная информация из заголовка (relocation table)

*.exe файла корректируется в соответствии с начальным адресом загрузки.

Подразумевается, что после такой обработки файл должен быть записан в ПЗУ и

запущен. Также в документе приведены краткие сведения о структуре программы.

  Программа может быть использована при создании BIOS, расширений BIOS для

плат ввода-вывода и другого ПО для встраиваемых систем, построенных на

платформе x86.

  Программа отличается от утилиты exe2bin из состава DOS тем, что может

обрабатывать *.exe файлы большой длины (больше, чем 64К).

 

                            Содержание

 

1. Общие сведения

2. Функциональное назначение

3. Условия применения и используемые технические средства, вызов и загрузка

4. Описание задачи

5. Состав проекта

6. Входные данные

7. Выходные данные

 

                            1. Общие сведения

 

   Программа имеет интерфейс командной строки. Программа отлажена на BC++ 5.02.

Библиотека потоков istream BC++ версии 5.02 обеспечивает корректную работу с

шестнадцатеричными числами с лидирующими символами "0x".

 

                            2. Функциональное назначение

 

   Программа предназначена для преобразования формата DOS-exe в формат,

пригодный для загрузки по абсолютным адресам.

 

                            3. Условия применения

 

   Программа предназначена для выполнения на IBM PC. Программа транслируется

для выполнения как консольное Win приложение. Для использования на другой

платформе необходимо скорректировать объявления типов:

 

typedef unsigned int       exe2rom_32;

typedef unsigned short int exe2rom_16;

typedef unsigned char      exe2rom_8;

 

из файла exe2rom.h и перетранслировать проект.

 

                            4. Описание задачи

 

   Необходимо обеспечить преобразование формата DOS-exe в формат,пригодный

для загрузки по абсолютным адресам. Для этого вся сегментная информация из

заголовка DOS-exe файла корректируется в соответствии с начальным адресом

загрузки. Также возможно задать вывод некоторой статистики о файле

(аналогично tdump.exe) и занесение в файл некоторой дополнительной информации

(контрольной суммы файла, его длины, состояния SS:SP, CS:IP).

 

                            5. Состав проекта

 

   Программа поставляется в файлах:

  

   1.  exe2rom.exe   - исполняемый файл

   2.  exe2rom.cpp   - функции-члены класса exe2rom_convert.

   3.  exe2rom1.cpp  - main и функции-члены класса exe2rom_err.

   4.  exe2rom.h     - h-файл проекта.

   5.  comline.cpp   - функции для работы с ключами командной строки.

   6.  comline.h     - h-файл для comline.cpp.

   7.  alfserv.h     - h-файл с описанием структуры дополнительной информации

                       для rom формата.

   8.  clerr.h       - h-файл с описанием класса для обработки ошибок

   9.  readrus.txt   - описание на русском языке

   10. readeng.txt   - описание на английском языке

 

                            6. Входные данные

 

   Входные данные задаются в виде командной строки. Формат командной строки:

 

exe2rom [-sw1 -sw2 ... -swn] input_filename output_filename report_filename

 

где:

sw1...swn             - ключи программы

exe2rom               - имя программы

input_filename        - имя входного DOS-exe файла

output_filename       - имя выходного rom-файла

report_filename       - имя выходного файла отчета

 

Шестнадцатиричные цифры в ключах должны задаваться с лидирующим 0x, как

принято в языке С.

 

Возможные ключи программы:

 

-s0xXXXXX - абсолютный адрес (пять hex цифр), с которого будет загружаться

программа. Все сегментные ссылки из relocation table будут приведены в

соответствие с этим адресом. Величина XXXXX задается в hex формате. Перед

началом модификации сегментных ссылок значение XXXXX приводится к формату

адреса сегмента (16 разрядов) путем отбрасывания младших 8 бит. Но задавать

нужно все пять цифр. Если последняя цифра абсолютного адреса не ноль, то она

обнуляется самой программой.

 

-l0xXXXXX - длина файла образа (пять hex цифр), до которой будет дополнен

выходной файл. Если файл больше указанного значения то дополнения не

происходит. Если ключ не указан то дополнения не происходит. Величина XXXXX

задается в hex формате.

 

-a0xXX - значение, которым будет заполнен конец файла в случае, если его

длина меньше указанной ключом -l. Величина XX(байт) задается в hex формате. По

умолчанию XX=0x00.

 

-t - если задан этот ключ, то в конец файла записывается структура, содержащая

дополнительную информацию. Формат этой структуры:

 

template <class T32,class T16,class T8> struct alfserv{

T32 loadadr;

T32 lenfile;

T16 ss;

T16 sp;

T16 ip;

T16 cs;

T16 reserved;

T8 csum;

T8 lastbyte;

};

 

где TXX беззнаковое целое с соответствующим количеством разрядов.

 

   Структура alfserv записывается сразу после загружаемого образа, перед

заполнением, заданным ключом -l.

 

   Назначение полей структуры alfserv:

loadadr  - в это поле заносится величина, заданная ключом -s

lenfile  - длина файла (32 разряда с длиной структуры alfserv и без длины

           заполнения, заданного ключом -l)

ss       - значение сегмента стека из DOS-exe файла    (16 разрядов)

sp       - значение указателя стека из DOS-exe файла   (16 разрядов)

ip       - значение указателя команды из DOS-exe файла (16 разрядов)

cs       - значение сегмента кода из DOS-exe файла     (16 разрядов)

reserved - резервное поле (равно 0x0001)

csum     - контрольная сумма загружаемого файла (8 разрядов). Она считается

           путем суммирования всех байт файла. Байты заполнения, заданные

           ключом -l, не суммируются. При суммировании перенос игнорируется.

           Начальное значение контрольной суммы 0x01 (определяется константой

           ALFSERV_STARTCSUM). Байты структуры alfserv (если заданы

           ключи -t или -f) включаются в контрольное суммирование, в том числе

           и поле lastbyte включается в контрольное суммирование. Таким

           образом, контрольное суммирование производится по уже

           скорректированному файлу.

lastbyte - последний байт структуры alfserv. Служит для отделения

           информационной части файла от заполнения, заданного ключом -l.

           Значение этого байта задается ключом -bXX.

           Если ключ -bXX не задан, lastbyte равен 0x01.

 

-bXX - значение последнего байта структуры alfserv. Величина XX(байт) задается

в hex формате. По умолчанию XX=0x01.

 

Пример:

 

exe2rom -s0x40000 example.exe example.rom

 

В этом примере из файла example.exe создается файл example.rom. Файл

example.rom должен быть загружен с физического адреса 0x40000.

 

-f - если задан этот ключ, то структура alfserv записывается в начало файла.

Если заданы оба ключа (-t и -f), то работает ключ -f.

 

                             7. Выходные данные

 

   Выходные данные выводятся на экран и в файл отчета, если он задан.

Программа не анализирует формат DOS-exe файла и не проверяет его на

допустимость, поэтому при попытке конвертации файла не DOS-exe формата

возможны непредсказуемые последствия (зацикливание программы, получение

слишком большого выходного файла и т.д.)

 

Сайт создан в системе uCoz