Программирование для хакеров (Часть 2)

R

rrrFer

Гость
#1
Тут начинали переводить статьи из цикла "программирование для хакеров": Введение. Ну а я продолжу. Однако, мой перевод будет невероятно вольным, а какие-то части я вообще могу пропустить, т.к. на мой взгляд, автор исходных статей много говорит не по теме. В фигурных скобках и курсивом мои {переводчика} примечания.

Шаг 1 Создание файла с кодом

Дождитесь загрузки операционной системы {в оригинале - Ubuntu}. Откройте любой текстовый редактор {на самом деле, подойдет не любой - нужен т.н. plain text editor - в Linux это, например kate и gedit, в Windows - notepad, notepad++}. Вставьте в него этот код:
Код:
#include <stdio.h>
int main()
{
        printf("Hello Null Byte!\n");
        return 0;
}
Результат будет выглядеть примерно так:
c-c-programming-for-hackers-part-2-the-history-c-and-coding-our-first-program.w1456.jpg
Шаг 2. Сохранение файла

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

Шаг 3. Компиляция файла

{Откройте терминал (в Windows - командную строку)}. Если вы сохранили файл в домашней директории {касается только Linux-систем} - можете сразу выполнить команду компиляции. В противном случае вам надо сначала перейти в нужный каталог. Сделать это можно командой cd.
{Например если вы находитесь в каталоге C:\, а файл main.c находится в C:\lesson2 то достаточно выполнить команду
cd \lesson2
Если же вы находитесь на C:\, а файл main.c - на E:\lessons\lesson2 - то вам нужно сначала перейти на диск E - сделать это можно
cd /d E:
Ключ /d предназначен для смены каталога. Вы могли бы сразу перейти в нужный каталог с
cd /d E:\lessons\lesson2
а можно использовать несколько команд - сначала сменить диск, а затем указать конкретный каталог на нем.
Для вывода содержимого каталога используйте команду dir (в Linux также доступна команда ls).

Можно получить справку по командам. Например для вывода справки по команде dir - в Windows введите в консоли:
dir /?
а в Linux:
man dir

Использовать консоль/терминал совсем не обязательно. Но если привыкнуть, то это может быть удобно. Кроме того, часто применяются файловые менеджеры типа Far (Windows) или MidnightCommander (команда mc в Linux), упрощающие навигацию в файловой системе, но сохраняющие все прелести использования консоли).
}

После перехода в нужную директорию скомпилируйте программу командой:
gcc main.c
В результате успешной компиляции в текущем каталоге будет создан файл a.out. {Если вы что-то меняли (и сломали в файле main.c - на экран будет выведен список ошибок}.

Шаг 4. Запуск созданной программы

Для запуска созданной нами программы нужно файл, сгенерированный компилятором сделать исполняемым. {В оригинальной статье описывается этот процесс для Linux} - Для этого щелкните в файловом менеджере по нему правой кнопкой мыши, выберите "свойства", вкладку "ограничения" и поставьте галочку напротив - "разрешить выполнение файла".
{Чтобы сделать файл исполняемым в Windows достаточно сменить разрешение на .exe}
{А в Linux нормальный способ сделать файл исполняемым - использование команды chmod с ключом +x. Например:
chmod +x a.out
Это тем более логично, что на предыдущем шаге автор предлагал использовать терминал
}

Теперь перейдите в терминал и запустите файл командой:
./a.out
{точка в начале команды (пути файла) говорит о том, что используется файл из текущего каталога}.

На этот раз это все, а в следующей статье мы рассмотрим подробно исходный код нашей программы (которую скомпилировали только что).
 
R

rrrFer

Гость
#3
Конечно пишут. Во-первых, это один из основных языков разработки микроконтроллеров. Во-вторых, на Си пишутся системные утилиты (от С++ там нет особого профита), почти все драйвера в частности. В третьих - это один из основных языков параллельного программироания высокопроизводительных вычислительных систем (от ООП там опять же особого выигрыша архитектуре вы не получите, поэтому пишут чаще на Си и Фортране - посмотрите современные книжки по MPI {основной стандарт параллельного програмирования кластеров}).

В тему - вакансия программиста С/Linux (из почтовой рассылки, которая мне пришла сегодня). Снимок экрана из 2016-11-22 10-47-47.png

Т.е. писать то пишут, но вот статьи, которые я продолжил переводить какие-то нубские (хотя и называются "для хакеров") и язык Си я знаю гораздо лучше, чем автор оригинального текста. Поэтому тут больше моих комментариев, чем перевода.
 
Симпатии: Понравилось smDef

WebWare Team

Well-Known Member
Администратор
30.12.2015
1 128
1 148
#4
Однако, мой перевод будет невероятно вольным, а какие-то части я вообще могу пропустить, т.к. на мой взгляд, автор исходных статей много говорит не по теме. В фигурных скобках и курсивом мои {переводчика} примечания.
Вы выбрали самый верный путь. Спасибо !
 

Ishikawa

マエストロ
Премиум
15.11.2016
126
189
37
#5
Конечно пишут. Во-первых, это один из основных языков разработки микроконтроллеров.
Это была шутка, бро. Без обид :)
Я знаю что такое С (писал на borland, intel), писал на ассемблере MASM/FASM.
А по теме: переходи к сложностям, основы и так известны.
 
R

rrrFer

Гость
#6
Это была шутка, бро. Без обид :)
Я знаю что такое С (писал на borland, intel), писал на ассемблере MASM/FASM.
А по теме: переходи к сложностям, основы и так известны.
1) я на Си, если честно, почти не пишу. Я С++ и Java -программист;
2) я никогда не стал бы писать сам вот такие мануалы для чайников (и тем более называть их "для хакеров");
3) я нашел одинокую тему на форуме, где пользователь Ник Уайлд начал переводить серию статей. Лично мне содержание статей неинтересно.
4) я хочу уметь не только читать, но и писать корректные тексты на английском языке. Я учусь. Для этого читаю и перевожу тексты на английском. В основном, всякие мануалы и научные статьи по оптимизирующим трансляторам;
5) я подумал, ну а что бы не перевести по быстрому эту серию статей? (их там всего 10 штук). На неделе я это доделаю.
6) у меня есть свой блог (ссылку не даю, т.к. это будет уже реклама, да и не нужна мне реклама) и форум по программированию на С++. Иногда я размещаю материалы там, но эти статьи будут тут, т.к. с одной стороны их начали переводить тут (и не я), а с другой - содержание этих статей мне абсолютно не интересно.

Таким образом, я только перевожу статьи. Статьи для чайников и более сложных вещей в них просто нет. Я не пишу на Си промышленно, поэтому более сложные вещи от себя я не напишу. Я описываю какие-то сложные и интересные штуки о С++ и алгоритмах, но ты понимаешь, что мне целесообразнее сделать это на своем сайте (хотя кое-что на кодебай тоже перепадает).
 

kot-gor

Well-Known Member
ELEET
07.09.2016
385
409
39
#8
Добрый вечер, эх прям ностальгия .. вспомнились студенческие годы.Последний раз писал на си когда с ардуинкой баловался..)