8. User mode – фигня. Сделал первый драйвер. 9. Попросили написать ботнет за два дня. Взялся. Код на Си ставит в тупик? Чувствуешь себя ущербным, разбирая многостраничные листинги сплойтов? Друзья смеются над тобой, а мама привязывает тебе на шею котлету, чтобы хотя бы собачки с тобой дружили? Заправься как следует ноотропами и энергетиками - они тебе пригодятся, сейчас ты будешь кодить на Си. Или умрешь. [присоединяйся!] Знаешь, у меня в последнее время начало появляться ощущение, что нас, си-кодеров, как-то все меньше и меньше становится. Все в Delphi подались и там и остались. Delphi - удобная штука. И запутаться в ней практически невозможно - не то что в си. Компиляторов у нас бездна, среды разработки вообще не всегда прилагаются, а без них не всякий кодер разберется, что к чему. Привыкшему к Delphi, у которого все на своих местах, вряд ли вдохновит все это дело. Вот приводятся у кого-нибудь статьи в тексте на родном си-коде. Что написано - понятно, а как заюзать - нет. Знаешь, я не буду тебя мучить синтаксисом или подробной документацией всех ключей того или иного компилятора - с этим, думаю, у тебя и без меня достаточно геморроя. Я просто самым банальным образом покажу, как создать проект и начать в нем что-нибудь писать. Что-угодно. Хоть Hello world, хоть RAT. [давай определимся] Я себе и Microsoft изменять не стану, поэтому слов "давай определимся со средой и компилятором" ты здесь не прочтешь. Вернее, не прочтешь в родном для них контексте. Тут все очень просто. Два слова. Первое - Visual. Второе - Studio. Здоровый такой пакет, в который входит Visual C++. Он-то нам и нужен. По-моему мнению, ничего лучше найти ты не сможешь. Я в этом уверен. Сейчас уже прилично повылезло версий студии. На рынке можно найти целую тучу: MS VS 6.0 - для любителей поштамповать драйвера; MS VS .NET 2002 (7.0) - первая студия заточенная под .NET, однако не потерявшая очарования шестой; MS VS .NET 2003 - ненавистная мне версия, проекты которой не читаются моей любимой седьмой; и то ли вышедшая, то ли еще невышедшая, но совершенно точно появившаяся в емуле MS VS .NET 2005, которая нашему брату, по-моему, абсолютно не нужна. Для тихого старта я всегда советую седьмую. Доставай ее любыми возможными и невозможными путями и радуйся - большинство всей нечисти, что мешает жить нормальному пользователю воровством паролей, написано именно на ней. [новый проект] Современные системы программирования легко сбивают с толку еще зеленого кодера тем, что предлагают ему все мыслимые и немыслимые возможности. Хочешь, говорят, мы тебе сразу целый Word в виде шаблона приложения дадим? Или, мол, хочешь, MFC, ATL, VCL и еще миллион разной фигни в своем проекте поиметь? О ужас. Прочь! Прочь, демоны! Нам всего этого не надо. Нам нужен простой и пустой проект. Алгоритм его получения следующий: * Стартуй студию (или в случае 6.0 - сам си). * В появившейся среде жми File -> New -> Project. * Нас интересует обычное win32-приложение на си, поэтому переходи в закладку Visual C++ Projects и выбирай Win32 Project. Все остальное, предложенное студией, - ересь и рассмотру не подлежит. Фи. * Указывай внизу имя проекта и куда его плюхнуть, а затем стучи по кнопке OK. * Должен появиться ужасный Win32 Application Wizard, который, если оставить без внимания и сразу нажать на Finish, обеспечит тебя тонной чужого и совершенно бесполезного кода в своем проекте. В визарде переходи в закладку Application Setting. * Здесь тебе следует отметить, что приложение, которое ты создаешь, - Windows Application и что проект должен быть пуст (Empty project). Даже если ты хочешь консольное приложение - все так и оставь, я ниже объясню как к нему перейти. * После всего проделанного тобой должно появится пустое и серое окно студии. Ничего интересного не предвещающее, зато с новеньким проектом слева в Solution Explorer. * Жми правой клавишей на название проекта (не солюшена, а именно проекта) и выбирай Add -> Add new item. Мы хотим добавить в пустой проект файл, в котором мы, собственно, и будем писать нашу программу. * Выбирай С++ File, вбивай имя и жми OK. [первая программа] Теперь перед тобой открыт файл с расширением cpp, который будет скомпилирован, если ты полезешь в меню Build и наткнешься там на элемент Build <имя проекта>. Чтобы ты не думал, что я тебе лапшу на уши все это время вешал, показываю как этим пользоваться. Обозначаю сначала в программе хидер на все случаи жизни: #include Потом определяю пустую функцию, с которой начнется выполнение программы. У обычных приложений - это WinMain, у консольных - просто main. int WINAPI WinMain(HINSTANCE, HINSTANCE, PTSTR, int) {return 0;} Она ничего не делает, просто ноль возвращает. Да нам и не нужно чтобы она что-то делала. Хотя ради разнообразия можно вставить после первой фигурной скобки вызов функции MessageBox, чтобы не казалось, что мы все это время писали программу_которая_ничего_не_делает. Смотри: #include int WINAPI WinMain(HINSTANCE, HINSTANCE, PTSTR, int) { MessageBox(0, "Здраствуй, Мир!", "Ты прекрасен!", 0); return 0; } Если же ты ретроманьяк и хочешь консольное приложение, то нам придется вначале объяснить линкеру, что мы консольники, и немного изменить главную функцию. #include // для функции printf свой хидер #include #pragma comment(linker,"/SUBSYSTEM:CONSOLE") int main(int argc, char **argv) { printf("Hello, world!"); return 0; } Прагма в пятой строчке определяет тип нашего приложения. С тем же успехом вместо CONSOLE там могло красоваться WINDOWS или NATIVE. Прагма - штука жутко полезная. Вот захочешь, чтобы твой helloworld 1Кб занимал, добавишь строку: // стандартная точка входа, заталкиваемая компилятором, заменяется нашей #pragma comment(linker,"/ENTRY:WinMain") И почти все лишнее из программы исчезнет. Можно еще секции смержить (ключ /MERGE), убрать всякие проверки, CRT и подобную фигню, но я обещал, что не буду о документации. Для этого есть MSDN, без которого, кстати, ни один нормальный windows-кодер еще не обходился. Коэффициент must have у него - 100%. Так что вместе со студией тебе абсолютно точно нужно обзавестись MSDN. Вот. Надеюсь, дорогой Delphi-кодер, этого короткого материала хватит тебе для того, чтобы написать твою первую программу на си и, как говорят в BHC, вступить и компилировать. Чтобы скомпилить программу, просто нажми CTRL+SHIFT+B. Заодно убедишься, что все приведенные листинги настоящие. .
Источник: http://xakep.ru |