Криптография и ошибки в программах 0:24 Криптография решает задачи защиты информации, но не решает проблемы безопасности в сети интернет. Ошибки в программах могут быть связаны с проектированием, обратной совместимостью и архитектурой процессоров.
Архитектура Intel и уязвимости 7:29 В архитектуре Intel можно исполнять программы с любого байта, что облегчает организацию атак на переполнение буфера. В операционной системе Linux изучается архитектура Intel для учебных целей.
Пример уязвимости и отладка 11:36 В программе на языке C есть уязвимость, связанная с переполнением буфера. В лекции рассматривается, как отлаживать и трассировать процессы в операционной системе Linux.
Указатели и стеки 17:52 Указатель - это указатель на данные, обычно используется как счетчик цикла. Важные для понимания шелкода регистры, которые работают со стеком: указатель на вершину стека, указатель на данные на стеке, ESP и EBP.
Процессы и виртуальная память 19:10 Каждый процесс имеет свое адресное пространство, которое операционная система следит за тем, чтобы процессы не нарушали данные друг друга. Процесс может использовать всю физическую память, но виртуальная память контролируется операционной системой.
Сегменты и права доступа 22:30 Сегмент - единица разделения памяти по типам данных и по сегментам. В каждом процессе есть сегменты, которые могут быть помечены как исполняемые или неисполняемые.
Стек и его работа 26:14 Стек - структура данных, которая работает по принципу "пласты". Стек-фрейм - это параметры и локальные переменные функции, которые хранятся на стеке. При работе с функциями, объекты памяти могут иметь статическое, динамическое или автоматическое размещение.
Сэмплеры и их использование 36:26 В Linux используются два синтаксиса сэмплера: Intel и AT&T. В Unix-подобных операционных системах исторически используется AT&T-синтаксис, который используется в GCC и других утилитах.
Компиляция и линковка 39:36 При компиляции из C в язык ассемблера выполняются основные языкозависимые оптимизации. После компиляции получается объектный файл, содержащий машинный код и вызовы внешних функций. Линукс умеет понимать и исполнять исполнимые файлы старых форматов, таких как a.out.
Исполнимые файлы и их форматы 44:06 В Linux используются форматы ELF и a.out. Исполнимые файлы могут быть текстовыми, динамическими библиотеками и объектными файлами. Статические библиотеки имеют расширение .a и представляют собой архивы объектных файлов.
Перегрузка функций и манглинг 52:11 В C++ при перегрузке функций компилятор использует манглинг для декорирования имен функций. Манглинг отличается от компилятора к компилятору и обычно добавляет подчеркивания к имени функции и суффикс, указывающий типы аргументов.
Работа с бинарными файлами 54:10 Для чтения и работы с бинарными файлами используются утилиты из состава бинутиус. Для формата ELF используются интерпретаторы lipl de и lipl so. При старте программы связываются символы в ELF файле с динамическими библиотеками.
Настройка и использование библиотек 57:40 Настройка библиотек осуществляется через файлы конфигурации или переменные окружения. Указание пути в файле конфигурации позволяет найти разделяемую библиотеку при запуске программы. Через интерфейс дели опен можно связать указатель на функцию с библиотекой и вызвать ее с параметрами.
Работа с переменными окружения 1:02:49 Переменные окружения могут быть определены для текущего пользователя или для всех процессов. Утилиты, такие как sudo и screen, могут изменять значение переменных окружения.
Манипуляции с бинарными файлами 1:09:32 Для работы с бинарными файлами используются утилиты из состава бинутиус, такие как nm и objdump. Эти утилиты могут быть полезны для анализа файлов и в системах сборки проектов.
Использование nm и ldd 1:10:24 nm показывает список символов, экспортируемых из объектного файла в библиотеке. ldd показывает список библиотек, от которых зависит бинарник.
Использование обж-дампа 1:13:03 обж-дамп позволяет получить листинг ассемблера для любой секции или всего файла. Используется для дезацилирования статических файлов.
Использование трассировщиков 1:16:11 Трассировщики, такие как стресс, могут использоваться для отслеживания системных вызовов и сигналов. Профайлер джи проф может показать более подробную информацию о программе.
Задание на практику 1:18:34 Скомпилировать, собрать объектный файл, слинковать исполнимый файл. Исследовать программу с помощью гдб, обж-дампа и трассировщиков. Сравнить вывод обж-дампа с исходным текстом программы.