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

       

Компилирование исходного файла


Вы должны скомпилировать утилиту datapipe для своей платформы. Полезно иметь предварительно скомпилированные бинарные файлы для нескольких типов операционных систем Unix: Solaris, AIX, Linux, FreeBSD и др. Используйте команду gcc для компилирования под Linux и семейство BSD.

$ gcc -o datapipe datapipe.c datapipe.c: In function 'main': datapipe.c:86: warning: passing arg 1 of 'gethostbyaddr' from incompatible pointer type datapipe.c:98: warning: passing arg 2 of 'bind' from incompatible pointer type datapipe.c:113: warning: passing arg 2 of 'accept' from incompatible pointer type datapipe.c:136: warning: passing arg 2 of 'connect' from incompatible pointer type

В приведенном выше примере двоичный код скомпилировался успешно. Предупреждений, связанных с функциями bind, accept и connect, можно избежать, преобразуя тип второго аргумента к типу (struct sockaddr *), однако программа работает и без этого преобразования.

if (bind(lsock, (struct sockaddr *) &laddr, sizeof(laddr))) {

В зависимости от библиотек совместимости вашей системы, вам, возможно, придется также удалить строку 48.

#include <linux/time.h>

Спокойно удалите эту строку, не ожидая никаких неприятных последствий.

Утилита datapipe компилируется также под Cygwin, но вы должны изменить еще одну строку (строка 96 в оригинальном исходном файле).

laddr.sin_family = htons (AF_INET);

Удалите вызов функции htons.

laddr.sin_family = AF_INET;

Помните, что файл cygwin1.dll необходим, чтобы утилита datapipe выполнялась в системе Windows, однако вам не нужно регистрировать файл DLL. Обратите внимание, что Windows не требует, чтобы вы являлись привилегированным пользователем (т. е. имели права администратора) для открытия портов, имеющих номера ниже, чем 1024.

Другие опции компилирования. При компилировании утилиты datapipe для некоторых вариантов системы Unix компонуйте такие версии бинарного кода, которые имеют свойства static и shared (общего доступа). Версия бинарного кода, использующая библиотеки общего доступа, компонуется по умолчанию с опциями компилятора gcc, упомянутыми выше.
Эти опции дают самый маленький двоичный файл, но он, возможно, будет выполняться только на том физическом хосте, на котором он компилировался. Альтернатива состоит в компоновке статической версии, которая содержит все функции поддержки, необходимые, чтобы программа выполнялась.

$ gcc -o datapipe_static -static datapipe.c

С такими опциями создается двоичный файл намного большего размера, но он должен выполняться на любой равнозначной операционной системе. Статическая версия утилиты datapipe облегчит перенос этой программы на систему, которая, возможно, не имеет компилятора. Вы можете также добавить к gcc опцию -s, чтобы удалить часть неиспользуемой символьной информации.

$ gcc -o datapipe_static_stripped -static -s datapipe.c

Ниже приводятся примеры различных размеров файлов, которые получаются на системе OpenBSD. Звездочка указывает на то, что файл является исполняемым:

-rwxr-xr-x 1 root wheel 29420 Mar 9 20:05 datapipe* -rw-r-r- 1 root wheel 4556 Mar 9 20:05 datapipe.c -rwxr-xr-x 1 root wheel 175139 Mar 10 01:45 datapipe_static* -rwxr-xr-x 1 root wheel 143360 Mar 10 01:45 datapipe_static_stripped* Совет. Попытайтесь скомпоновать коллекцию сервисных программ datapipe, используя опции -static и -s для операционных систем Solaris (sparс и x86), AIX, IRIX, Linux (x86) и FreeBSD.


Содержание раздела