Ибрагим Данилов
1
подписчик
Но хакер понимает, что в реальности выполняется именно скомпилированная программа
Обычному программисту, которому нужно только, чтобы скомпилированная программа работала, интересен собственно исходный код. Но хакер понимает, что в реальности выполняется именно скомпилированная программа. Хорошо разбираясь в работе ЦП, хакер может манипулировать программами, которые на нем выполняются. Мы видим исходный код своей первой программы и компилируем его в исполняемый двоичный файл для архитектуры x86. Но как выглядит этот двоичный файл? Среди инструментов разработчика GNU есть программа под названием objdump, с помощью которой можно изучать скомпилированные двоичные файлы...
Большинство программистов, даже выучив язык от корки до корки, никогда не достигнут большего
Хорошо, все эти важные основы на уровне начального курса программирования. В большинстве вводных курсов по программированию учат, как читать и писать на C. Но поймите меня правильно: свободно владеть C очень полезно и этого достаточно, чтобы считать себя программистом, но это лишь часть более общей картины. Большинство программистов, даже выучив язык от корки до корки, никогда не достигнут большего. Преимущество хакеров в том, что они понимают, как взаимодействуют между собой все части общей картины...
Первая строка программы может озадачить
Выполнение C-программы начинается с главной функции, которую так и называют – main(). Текст после двух косых линий (//) является комментарием, компилятор его игнорирует. Первая строка программы может озадачить, но это всего лишь синтаксис C, с помощью которого компилятору сообщают о необходимости включить заголовки для библиотеки стандартного ввода/вывода имя которой – stdio. Этот заголовочный файл будет добавлен в программу во время компиляции. Его полное имя /usr/include/stdio.h, и в нем определены некоторые константы и прототипы функций, находящихся в стандартной библиотеке ввода/вывода...
Обычно в псевдокоде не используют функции
Обычно в псевдокоде не используют функции, потому что псевдокод служит в основном для создания эскиза программы перед тем, как писать код, который можно компилировать. Поскольку псевдокод реально не будет работать, полностью писать функции не требуется – достаточно отметить что-то вроде «Сделать здесь какую-то сложную вещь». Но в языках программирования, таких как C, функции используются весьма интенсивно. Немалую долю реальной полезности C составляют наборы готовых функций, называемые библиотеками...
Обычно прототипы функций размещаются в начале программы
Обычно прототипы функций размещаются в начале программы. Объявлять какие-либо переменные в прототипе не нужно, потому что это делается в фактической функции. Единственное, что нужно компилятору, это имя функции, тип возвращаемых ею данных и типы данных ее аргументов. Если функция не должна возвращать никакого значения, как, скажем, функция повернуть() в предшествующем примере, ее следует объявить с типом void. Однако функция повернуть() еще не охватывает все действия, необходимые для проезда по маршруту...
Функция в C не помечается ключевым словом
В языке C по умолчанию функция после ее вызова может вернуть значение. Те, кто знаком с математическими функциями, понимают, насколько это разумно. Например для функции, вычисляющей факториал числа, естественно вернуть результат вычислений. Функция в C не помечается ключевым словом function, а объявляется указанием типа данных переменной, которую она возвращает. Это очень похоже на объявление переменной. Если функция должна вернуть целое число (например функция, вычисляющая факториал числа x),...