
Учим Си: работа с указателями
Xakep, номер #033, стр. 033-052-1
Денис Мысенко (denis@mysenko.com)
Так, народ. Хватит халявничать, юзать чужие скрипты и эксплоиты, начинаем кодить сами. Если тебе кажется, что владеть языком - означает доставлять подруге удовольствие, то ты сильно ошибаешься, речь пойдет о вещи гораздо более сложной и сухой. Ты предпочитаешь Visual Basic? Удаляй как можно быстрее! Давно известно, что хакерский язык программирования - Си. Да, конечно, Дельфи тоже неплох, особенно для начинающих. И мы не зря описываем именно его в рубрике Кодинг. Но после того (а лучше во время), как ты научишься кодить на Дельфях, тебе обязательно нужно изучить Си. Особенно это касается тех, кто хочет предложить свою руку и голову Линуксу, т.к. все экплойты под *nix пишутся именно на Си.
Для озабоченных историей: язык Си выдуман в конторе Bell Labs в США, а сам компилятор (сборщик запускных файлов из сорцов; сорцы (sources) - исходники) Си написан, соответственно, на языке Си (то есть на самом себе), что делает его особенно компактным и переносимым. Итак, приступим к описанию языка.
Типы данных
Под типами подразумеваются не братки, а виды какой-либо инфы, которую мы крутим в руках в процессе выполнения программы. Это могут быть цифры, буквы, слова (в том числе и матерные). Объявляются переменные в начале (в самом-самом начале) какой-нибудь из функций и юзаются, соответственно, в ней. Выглядит это так:
int ciferka, eshe_ciferka, i_eshe_ciferka;
char bukovka, eshe_bukovka, gy_gy;
char[20] materki;
Первое слово говорит о типе инфы, которая будет содержаться в переменной, затем идет перечисление (через запятую) имен, сколько переменных - столько и имен. Имя можешь делать какое угодно, лишь бы не с цифры начиналось и без всяких там минусов, т.е. юзай только английские буквы, цифры и знаки подчеркивания!
Типы могут быть следующие:
int - циферка
long int - бооольшая циферка
unsigned int - циферка, всегда положительная
void - пустышка, просто ничего
float - циферка с запятой
double - бооольшая циферка с запятой
char - символ, один символ!
char[X] - слово из X символов
Это, конечно, не все, но тебе для начала хватит :). Когда ты объявляешь все эти фишки, твоя программа, запустившись, будет под каждую забивать место в памяти, а если какая-то переменная останется неюзанной - компилятор при сборке начнет плакать.
Структура программы
Анатомия у программы на Cи простая - это просто куча органов, то есть функций - мелких подпрограмм, никаких процедур и прочих аналов как таковых нет. Половым органом служит функция main, и если твой половой орган можно назвать тридцатью тремя грубыми и не очень словами, то в Си - это всегда main. С этой подпроги начинается запуск основной программы и только с нее, а что там дальше будет - дело твое. Кстати, function`ы возвращают какие-то значения, то есть после завершения они отдают какую-либо инфу функции, которая ее вызвала. Т.е. подпрограммку можно рассматривать как переменную, которая как-то хитро рассчитывается. Таким образом, получаем следующий скелет:
void main ()
{
int blabla;
char zlo;
blabla = 5;
zlo = 'A';