ИБ, 07 лекция (от 15 ноября)
Материал из eSyr's wiki.
Сегодня мы вспоминаем ассемблер, рассматриваем сферический процессор в вакууме, не конкретную модель, но отдельные особенности, важные для уязвимостей.
Рассматриваться будут особенности на платформе Linux, поэтому рассмотрим две нотации — Intel использует свою нотацию в своих техдоках, в Linux практически единственный комплилятор это gas, синтаксис у него AT&T.
Сферический процессор в вакууме состоит из ..., устройства ввода-вывода могут читать/писать байты, в оперативной памяти хранятся байты.
Далее, собственно процессор, тут он у нас уже несколько овальный.
Регистры. ...
Виртуальная память процесса. Каждая программа считает, что она единолично управлет ресурсами системы. По крайней мере, ОС пытается сделать вид. У каждого процесса есть своя виртуальная память.
Важная особенность всего этого: все сегменты стека растут снизу вверх. Стек же растёт вниз. Почему это важно: push и mov работают как бы наоборот, и это ведёт к ряду интересных эффектов, которые позволяют эксплуатировать уязвимости вида переполнения стека 15 лет назад.
Подробнее про стек. Стек работает по алгоритму FIFO. Для работы со стеком есть специальные архитектуры. Ничто не мешает при этом работать со стеком как с линейной памятью. Что хранится в стеке: локальные переменные, аргументы, адрес возврата.
Важно помнить, что call/ret/push меняют esp/ebp. esp всегда смотрит на вершину стека. Зная только его, мы не можем знать, где мы вообще. Для этого есть ebp.
Про размещение объектов. Есть три способа: статически, динамически или автоматически. Автоматическое размещение используется для локальных переменных и параметров функций.
Введение в информационную безопасность
01 02 03 04 05 06 07 08 09 10 11 11
Календарь
Октябрь
| 04 | 11 | 18 | 25 | |
Ноябрь
| 01 | 08 | 15 | 22 | 29 |
Декабрь
| 06 | 13 | 20 |