Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

TextmetukSPO

.pdf
Скачиваний:
18
Добавлен:
28.06.2021
Размер:
340.6 Кб
Скачать

ПРИЛОЖЕНИЕ 3.

Компоновщик ALINK.EXE для операционных систем типа Windows

Утилита ALINK есть компоновщик для OBJ и LIB файлов, и создает COM и EXE файлы для MSDOS, а также файлы Win32 PE. Он также поддерживает ресурсные файлы для их компоновки в состав PE файлов. Поддерживает MS/Intel OMF и MS-COFF объектные и библиотечные файлы, но не поддерживает библиотеки импорта для формата MS-COFF. Компоновщик ALINK является свободно распространяемым программным продуктом.

Командная строка его вызова имеет в общем случае вид:

ALINK [options] filename [options] [filenames] [options] ...

По умолчанию ALINK выполняет компоновку с учетом регистра букв (различая строчные и прописные буквы) для EXE файла. Если имена файлов в строке вызова не включают расширения, то предполагается расширение .obj. Дополнительные параметры могут быть взяты из файлов отзыва (response files) путем указания имени файла, которому предшествует символ @, т.е. в виде

ALINK @response.fil

Пустые строки в таком файле отзыва игнорируются, опции могут быть заданы либо вместе на одной строке, либо на раздельных строках. Текстовые строки в кавычках рассматриваются как один параметр. Символы точки с запятой рассматриваются как начало комментария, а остаток строки после такого символа игнорируется. Если требуется использовать точку с запятой в качестве значащего символа, то его следует поместить в кавычки.

Опции и имена файлов могут быть использованы в файле параметров, но имена файлов не могут включать метасимволы. Может быть использовано более одного файла отзыва в одном командном вызове компоновщика ALINK, а также могут быть использованы дополнительные файлы отзыва, включаемые в свою очередь в файл отзыва. Циклические ссылки не детектируются и могут вызвать проблемы зацикливания вызовов до исчерпания памяти.

Возможны следующие опции:

-c

Действует компоновка с различием прописных и строчных букв

-c+

То же самое

-c-

Выключить различение прописных и строчных букв

-o yyy

Задание выходного файла yyy

-oxxx

Задает в качесте выходного файла формат xxx

 

COM = выходной файл типа COM

 

EXE = выходной файл типа EXE

61

 

PE = выходной файл типа Win32 PE (с расширением .EXE)

-m

Порождать файл карты загрузки с расширением map

-m+

То же самое

-m-

Не порождать файл карты загрузки

-L ddd

Добавить каталог ddd к списку поиска библиотек

-h

Отобразить список справочной информации

-H

То же самое

-?

То же самое

-entry name

Использовать глобальное имя name как точку запуска программы

Для PE файлов дополнительно предоставляются следующие опции:

-base addr

Установить базовый адрес для image (по умолчанию = 4Mb)

-objectalign xxx

Установить выравнивание в памяти (по умолчанию = 64K)

-filealign xxx Установить выравнивание секций в файле (по умолчанию = 512) -subsys xxx Установить подсистему выполнения (по умолчанию = windows)

windows, win или gui => оконная подсистема console, con или char => консольная подсистема native => подсистема внутреннего интерфейса native posix => подсистема POSIX

-subsysver x.y

Установить x.y версию подсистемы (по умолчанию = 4.0)

-osver x.y

 

Установить x.y версию OS (по умолчанию = 1.0)

-heapsize xxx

 

Установить размер heap (по умолчанию = 1Mb)

-heapcommitsize xxx Установить размер привязки heap к физической памяти

 

 

(по умолчанию = 4K)

-stacksize xxx

 

Установить размер стека (по умолчанию = 1Mb)

-stackcommitsize xxx Установить размер привязки стека (по умолчанию = 4K)

-dll

Построить DLL вместо исполняемого EXE файла.

-stub filename

 

Использовать указанный файл как заглушку MSDOS.

Выравнивание должно быть степенью 2. Выравнивание объекта может быть от 512 до 256Mb, выравнивание файла может быть от 512 до 64K. Базовый адрес образа и его выравнивание могу быть указаны как десятичные числа или как шестнадчатеричные числа, которым предшествует префикс 0x. База образа должна быть кратна 64K.

В задании опции существенно, задаются они прописными или строчными буквами.

Если имя выходного файла не указано, то его имя определяется по типу выходного файла и основной части имени для первого в списке объектных файлов. Т.е. командный вызов

ALINK file1.obj -oCOM -o outfile.com

создает выходной файл outfile.com из файла file1.obj, а вызов

ALINK file2.obj file3.obj -oEXE создает файл file2.exe

62

Сегменты из различных объектных файлов соединяются в один, если эти сегменты имеют одно и то же имя и класс, а также не объявлены как private. Абсолютные сегменты никогда не соединяются в один, а стековые сегменты всегда объединяются в общий сегмент стека.

Сегменты размещаются в порядке, в котором они присутствуют в объектных файлах, если только не использованы директивы создания групп (директивы group). Все сегмент в группах размещаются перед сегментами, не входящими в группы. Сегмент не может находиться более чем в одной группе. Сегменты в группах размещаются в порядке, указанном в определении группы. Если описаны два различных определения одной и той же группы, перечисляющие сегменты в различном порядке, то используется первое определение.

Таким образом, если во втором примере выше файл file2.obj содержит определение группы, эквивалентное исходному описанию

agroup group code,data,stack

а файл file3.obj содержит определение группы, эквивалентное исходному описанию

agroup group data,stack,bss,code

то окончательное строение группы agroup будет code,data,stack,bss

Текстовый вывод компоновщика содержит всю осведомительную информациюи список всех файлов, в тому порядке, как они загружались. Любая нераспознанная объектная запись будет вызывать ошибку. Любые повторно распознаваемые, но игнорируемые записи, такие как записи LINNUM и записи COMENT будут отображены на экране. Так как отладочная информация часто содержится в записях COMENT, это может приводить к значительному объему вывода.

Файл карты загрузки перечисляет сегменты, глобальные имена, экспортируемые и импортируемые имена.

Образец библиотеки импорта для Win32 включен как win32.lib. В нее включены все имена, экспортируемые библиотеками динамической компоновки Kernel32, User32, GDI32, Shell32, ADVAPI32, version,winmm, lz32,commdlg и commctl. Следует использовать вызов

alink -oPE file[.obj] win32.lib

чтобы подключить этот инструментальную библиотеку win32.lib.

Другим вариантом указания этой библиотеки импорта служит задание директивы

INCLUDELIB "win32"

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

При использовании библиотеки импорта win32.lib можно применять глобальные имена системных функций как в виде вызова

call importName так и в виде вызова

call [__imp_MessageBoxA]

63

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

64