| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 216.73.216.86
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС написать свою операционную систему видио Обратная Tor сторона антенна ноута для WPA Strace php эксплоит эксплоиту рознь Windows Server 2008 QIP Virtual kernel proc sysctl Tune freeBSD mrtg Boot Bluetooth GEO game Video emulator Shell Python поколения червь Conficker вирус троян лаборатория касперского пиратство Apple iPhone Microsoft twitter социальная сеть анонимность приватность лицензия Open Source уязвимость MySQL база данных Закон Франция Пират Skype мобильный хакер trend micro кибератака Германия робот Персональные данные Ноутбук Интернет китай цензура windows vista acer Linux патент браузер Firefox Internet Explorer Opera Safari Intel патч Oracle Банкомат IBM США Dell контроль кибербезопасность приговор Mozilla Chrome безопасность Госдума СМИ КПРФ Windows 8 взлом Пентагон Украина Facebook Cisco Windows XP нетбук торрент музыка Биометрический Nokia телефон Hardware ФБР IP-адрес sms RSA java Google Captcha Symantec Спам Антивирус тест Windows 7 операционная система windows провайдер авторское право rapidshare UNIX свиной грипп ГИБДД шантаж Дети копирайт McAfee HTTPS icann студент Норвегия New York Times YouTube Warner Music КНДР Ubuntu касперский Россия РФ сервер хостинг верховный суд Wi-Fi суд пароль блог фишинг одноклассники Медведев контрафакт мошенник sony Gps по JavaScript Хакеры Yahoo фас компьютер софт Минкомсвязи Сбой Toshiba мошенничество Доктор ВЕб Вконтакте Италия исходный код Прослушка тестирование МВД фильтр порнография свобода слова казахстан Sony Music сисадмин Autodesk Gmail кредитная карта сомали LiveJournal шифрование банк Нанотехнологии wikipedia выборы DNS KaZaA Android атака Mac OS X домен ФСБ прокуратура уголовное дело ICQ Sophos ошибка военные DARPA сайт турция конференция спамер Полиция Koobface Перевод Великобритания белоруссия Грузия Европа Билл Гейтс спецслужбы Royal Bank of Scotland смартфон F-Secure Symbian MSN трафик фильм инновации Ватикан SP1 Новая Зеландия Adobe Австралия IDC новости Internet Explorer 9 iPad должник Ирландия поиск GOOGLE EARTH МТС Реклама слежка компьютерные игры Zeus личные данные eset Avira защита виртуализация dll МСЭ Черный список BlackBerry система защиты льготы индия Москва социальные сети flash player paypal BitDefender email сертификат блокировщик Евросоюз налог Гражданский кодекс Anonymous технологии OpenOffice Ассанж Оптоволокно передача данных арест Samsung Иск компания учетная запись Корея Сирия оборудование Британия Президент исследование Санкт-Петербург документооборот SOPA PIPA событие Регистрация пользователь Megaupload беспилотник отчет приложение Интернет-магазин законодательство соглашение Инвестиции ГЛОНАСС платформа Непал роскомнадзор

Главная » Статьи » Общие Статьи

Сygwin
Cygwin - это аббревиатура от 'Cygnus', группы разработчиков свободного ПО в рамках проекта 'RedHat' и 'Windows', всеми нами любимой операционной системы. Спешу развеять очень популярную точку зрения, будто бы cygwin - это эмулятор UNIX под Windows: это не так! Cygwin - это лишь мощный, очень развитый и, самое главное, бесплатный набор программных средств переноса (портирования) UNIX'ового ПО под Windows и кросс-компиляции (создания бинарного кода на одной платформе под другую) UNIX'овго софта. Лично для меня, cygwin, прежде всего, это мощнейший компилятор gcc с отшлифованными под Windows хидерами и либами.

Cygwin нынче становится весьма популярным: многие производители свободного ПО под UNIX поддерживать '--target=cygwin' в конфигах своих программ, благо, это не столь трудоёмко. А cygwin, в свою очередь, расширяет совместимость с UNIX, поддерживая не только posix, но и другие, более узкоспецифичные стандарты UNIX-систем.

Cygwin: где смотреть?

http://www.cygwin.com - официальная страница cygwin'а, на которой Вы сможете найти достаточное количество информации о текущем состоянии проекта, об обновлениях cygwin'овских релизов, а также официальный список ftp-серверов, периодично зеркалящих cygwin.

Cygwin: что и как устанавливать?

На Хакере уже несколько раз писали про установку и использование Cygwin, поэтому рекомендую вам обратится к тем статьям:
CYGWIN - *nix в ваших Виндах
Особенности настройки Cygwin

gcc: какой он?

Точно такой же, как и в UNIX. Сочный, мощный, безглючный. Однако, не такой быстрый. Дело в том, что запуск препроцессора, компилятора, ассемблера и линковщика требует определённого времени на загрузку и пролинковку в памяти библиотеки cygwin1.dll, требумую каждым из этих компонентов gcc. Отмечу, что в Windows 2000 это требует на порядок меньше времени, чем в Windows 98. Скорость компиляции в Windows 2000 очень близка к скорости компиляции в UNIX. Но сок остаётся соком: генерируемый бинарный код cygwin'ным gcc остаётся вне конкуренции по компактности и эффективности!

Если Вы когда-либо писали или компилировали программы под UNIX, Вы не будете испытывать никаких трудностей в работе с cygwin. Только помните, что cygwin'ный gcc может не поддерживать некоторые опции, которыми Вы пользуетесь в UNIX'е, хотя количество таких недоразумений сведено к минимуму. На моём веку, например, таких проблем не возникало. В любом случае, если возникают какие-то проблемы, все мы дружно знаем лучший способ их решения: 'man gcc'! :)))

Если же Вам не доводилось прежде заниматься программированием под UNIX и Вы привыкли жать <F9> для того, чтобы скомпилировать Вашу программу, расстраиваться не стоит. Попробуйте 'man gcc' в bash'е cygwin'а: вполне достойное и увлекательное чтиво.

Таки начнём?

Оригинальничать я не буду, поэтому начнём мы, как всегда и везде, с вывода 'hello world!' на консоль. Итак, hello.c:

#include <stdio.h>
int main () {
printf("Hello World!\n");
return 0;
}


Компилируем:

gcc -s hello.c -o hello.exe

и смотрим на бинарник. 3072 байта бинарного кода, формат PE, portable executable, загружаемые dll:

cygwin1.dll, откуда hello.exe берёт нашу printf() и другие функции, которые накомпилировал нам gcc;
kernel32.dll, откуда hello.exe берёт GetModuleHandleA.

Хидер <stdio.h> gcc берёт из /usr/include, который является дефолтной инклудной директорией и в UNIX, и в cygwin'е.

В cygwin'ном gcc есть одна очень приятная опция, которая, почему-то, не задокументирована в man-файле, '-mno-cygwin'. Скомпилируем нашу программу с этой опцией:

gcc -mno-cygwin -s hello.c -o hello.exe

и смотрим на бинарник: опять, 3072 байта бинарного кода, но наша программа больше не нуждается в cygwin1.dll! вместо этого она использует msvcrt.dll, где и находит нужную нам функцию printf.

Если мы юзаем опцию '-mno-cygwin', cygwin кидает gcc'шный препроцессор в директорию /usr/include/mingw, и, соответственно, gcc компилирует <stdio.h> именно из этой директории.

Настоятельно рекомендую совершить прогулку по содержимому директории /usr/include для того, чтобы понять, что к чему. Думаю, Вас особо порадует содержимое директорий /usr/include/sys и /usr/include/w32api.

Таким образом, cygwin находит компромисс между двумя противоречащими друг с другом платформами, UNIX и Windows и даёт нам уникальный шанс изучать программирование под UNIX, не покидая Windows. Далее следует пример простенькой программки, компилирующейся и под posix'овые BSD Sockets, и под WinSock2. Программка открывает указанный в командной строчке порт и ожидает tcp-соединение с любого IP-адреса, принимает от клиента литеру и возвращает клиенту эту же литеру, увеличенную на единицу. Вы можете скомпилировать эту программку, запустить её ('easy.exe 500'), приконнектиться к ней телнетом ('telnet 127.0.0.1 500') и ввести любой символ.

---[ Makefile (для неюниксоидов, Makefile с заглавной буквы 'M'):

# tiny makefile for a tiny program

all:
@echo Pick 'make posix' for UNIX/cygwin or 'make windows' for Windows

posix:
@printf "Building easy.c for posix..."
@printf "#define ENV_POSIX" > plateform.h
@gcc -s easy.c -o easy.exe
@echo ok!

windows:
@printf "Building easy.c for windows..."
@printf "#define ENV_WINDOWS" > plateform.h
@gcc -mno-cygwin -s easy.c -lws2_32 -o easy.exe
@echo ok!

---[ easy.c:

#include "plateform.h"
#include <stdio.h>

#ifdef ENV_POSIX
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h> // для INADDR_ANY
#include <signal.h> // для signal()
#else
#include <winsock2.h>
#endif

int main (int argc, char **argv) {

struct sockaddr_in dst;
#ifdef ENV_POSIX
int sock, sid;
#else
SOCKET sock, sid;
WSADATA wsaData;
#endif
int len = sizeof(struct sockaddr);
char buf;
unsigned short port;

// entry point

if(argc<2) {
printf("Usage: easy.exe <tcp-port>\n");
return 1;
}

port = atoi(argv[1]);

if(!port) {
printf("Bad <tcp-port> defined!\n");
return 2;
}

#ifdef ENV_POSIX // в позиксе мы игнорируем сигналы, мало ли :)
signal(SIGPIPE, SIG_IGN);
#else ENV_WINDOWS // в Windows мы проверяем версию винсока, мало ли :)
printf("Testing if the WinSock2 version is equal or higher than 2.1...");
if (WSAStartup(MAKEWORD(2,1),&wsaData) != 0) {
printf("failed!\n");
return 1;
}
printf("ok!\n");
fflush(stdout);
#endif

dst.sin_family = AF_INET;
dst.sin_addr.s_addr = htonl(INADDR_ANY);
dst.sin_port = htons(port);
sock = socket(AF_INET,SOCK_STREAM,0);
printf("Waiting for an incoming connection..."); fflush(stdout);
bind(sock,(struct sockaddr*)&dst,len);
listen(sock,1);
sid = accept(sock,(struct sockaddr*)&dst,&len);
printf("done!\nWaiting for incoming data..."); fflush(stdout);
recv(sid,&buf,1,0);
printf("received: [%2X]..."); fflush(stdout);
buf++;
send(sid,&buf,1,0);
printf("done!\n");

#ifdef ENV_POSIX
close(sock);
#else
WSACleanup();
closesocket(sock);
#endif

return 0;
}

Итак, мы набираем 'make posix' для того, чтобы собрать программу под UNIX'ом или под cygwin'ную среду или 'make windows' для того, чтобы не зависеть от cygwin'а и использовать лишь kernel32.dll, ws2_32.dll и msvcrt.dll, которые входят в стандартную поставку каждого дистрибутива Windows. Обратите внимание на размер бинарника: 4096 байт для cygwin, 4608 байт для windows! :)
Категория: Общие Статьи | Добавил: aka_kludge (19.08.2008)
Просмотров: 1973 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

18:43
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2026 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика