reverseenengineering:память

Это старая версия документа!


Устройство и работа памяти центрального процессора (ЦП)

Центральный процессор (ЦП) выполняет команды, обрабатывает данные и управляет памятью. Одним из ключевых компонентов всей архитектуры является система памяти, которая обеспечивает хранение, доступ и обмен информацией между процессором, устройствами и программами.

Понимание того, как устроена память на уровне процессора, необходимо для:

  • Оптимизации кода и производительности
  • Реверс-инжиниринга и анализа уязвимостей
  • Проектирования программ под низкоуровневые архитектуры

С точки зрения ЦП, память можно разделить на следующие уровни:

  • Регистры — самая быстрая и ближайшая память к ядру процессора
  • Кэш-память (Cache): L1, L2, L3
  • Оперативная память (RAM) — основное хранилище данных
  • Внешняя память (диск, SSD) — долговременное хранилище

Каждый уровень иерархии работает быстрее, чем следующий, но объём уменьшается и стоимость возрастает.

Регистр Назначение
`EAX`, `RAX` аккумулятор (результаты вычислений)
`EBX`, `RBX` база (часто используется в указателях)
`ECX`, `RCX` счётчик (используется в циклах, строковых операциях)
`EDX`, `RDX` данные (вторичные значения)
`ESI`, `RSI`, `EDI`, `RDI` источники и приёмники для операций
`ESP`, `RSP` указатель стека
`EBP`, `RBP` базовый указатель стека
`RIP` указатель команд (только в x64)
Флаги (`EFLAGS`, `RFLAGS`) хранят флаги результата: Zero, Carry, Overflow и т.д.

Регистры — это микросхемы внутри самого ядра ЦП, они обеспечивают мгновенный доступ к данным.

Кэш — это быстрая SRAM-память, встроенная в процессор. Она уменьшает время доступа к данным из RAM.

Уровень Расположение Примерный размер Задержка (циклы ЦП)
L1 Внутри ядра 32–128 КБ 3–4
L2 Внутри/рядом с ядром 256 КБ – 1 МБ 10–15
L3 Общая на несколько ядер 2–64 МБ 30–60
  • Write-back — запись в кэш, RAM обновляется позже
  • Write-through — запись сразу и в кэш, и в RAM
  • Cache line — минимальная единица данных (обычно 64 байта)
  • Direct-mapped — каждая строка памяти попадает в один слот
  • Set-associative — строки могут размещаться в любом из N слотов
  • Fully-associative — строки могут размещаться где угодно

RAM (DRAM) используется как основное рабочее пространство программ.

  • Адресуемость: в x64 системах — 2^64 байт (ограничено архитектурой и ОС)
  • Время доступа: ~80–120 нс
  • Скорость передачи: зависит от типа (DDR4, DDR5)

ОС предоставляет каждой программе собственное виртуальное адресное пространство, которое затем отображается в физическую память.

Компонент Описание
Page (страница) Блок виртуальной памяти, обычно 4 КБ
Page Table Таблица соответствий виртуальных и физических страниц
TLB (Translation Lookaside Buffer) Кэш отображений виртуальных адресов в физические
  • Сегментация — логическая разбивка памяти на сегменты (использовалась в x86)
  • Страничная организация — основа MMU (Memory Management Unit) в современных системах

Если данных слишком много для RAM, ОС может использовать файл подкачки или pagefile, хранящийся на SSD/HDD.

Тип Назначение
Swap/Pagefile Используется при нехватке оперативной памяти
MMAP файлов Отображение файла в память
Memory-mapped I/O Обмен данными с периферией через память
  • Линейная: последовательная адресация (x86, x64)
  • Сегментированная: используется в реальном режиме x86
  • Физическая: реальные адреса в DRAM
  • Чтение (read) — перенос данных из памяти в регистр
  • Запись (write) — перенос из регистра в память
  • Исполнение (execute) — чтение инструкций из памяти
mov eax, [ebp+8]       ; чтение аргумента функции
mov [esp+4], eax       ; запись в стек
call memcpy            ; вызов функции с аргументами в памяти
  • `mov`, `push`, `pop` — базовые операции чтения/записи
  • `lea` — получение адреса (без чтения)
  • `stos`, `lods`, `scas` — строковые операции
  • Buffer Overflow — выход за границы буфера
  • Use-after-free — доступ к освобождённой памяти
  • Race conditions — состояние гонки при совместном доступе
  • DEP / NX bit — запрет на выполнение кода в данных
  • ASLR — рандомизация адресов
  • Stack canaries — защитные значения в стеке
  • SMEP/SMAP — запрет выполнения пользовательской памяти в ядре

Понимание того, как работает память на уровне ЦП, критически важно для:

  • Написания эффективного кода
  • Анализа производительности
  • Реверс-инжиниринга и безопасного программирования

ЦП использует сложную иерархию памяти — от регистров до кэша и RAM, включая механизмы виртуализации и защиты. Это делает возможной как высокую производительность, так и изоляцию процессов.

NUMA — это архитектура многопроцессорных систем, при которой каждый процессор имеет локальный доступ к «своей» памяти, но также может обращаться к удалённой памяти других узлов (с большей задержкой).

Характеристика Описание
Узел NUMA (NUMA node) Набор: ЦП + локальная память
Локальный доступ Быстрый доступ к памяти своего узла
Удалённый доступ Доступ к памяти другого узла через межсоединение (Interconnect)
Примеры AMD EPYC, Intel Xeon, серверные платформы
  • Локальный доступ быстрее
  • Неправильное распределение памяти (например, в многопоточных задачах) снижает производительность
  • Используются политики NUMA (First touch, Interleaved, Bind memory to node)
numactl --hardware
  • Использование `numactl`
  • Привязка потоков к NUMA-узлам
  • Разделение данных по узлам

Prefetching — это механизм предугадывания того, какие данные потребуются процессору, и предварительной загрузки их из RAM в кэш.

Тип Описание
Hardware prefetch Автоматически кэширует данные при линейном доступе
Software prefetch Используется вручную с помощью инструкций (`prefetcht0`, `prefetchnta`)
Stride prefetch Улавливает шаблоны с фиксированным шагом доступа
Adjacent cache line prefetch Загрузка соседней строки кэша вместе с основной
prefetcht0 [esi+eax] ; загрузить строку в кэш из памяти
  • Уменьшает кэш-промахи (cache miss)
  • Особенно полезен в циклах, работе с массивами, потоках
  • Может ухудшать производительность, если предсказание неверное (pollution)

Intel VT-x — это технология виртуализации, обеспечивающая аппаратную поддержку виртуальных машин. В контексте памяти VT-x влияет на двойную трансляцию адресов.

Этап Описание
Guest Virtual Address (GVA) Адрес, используемый в ВМ (например, Linux)
Guest Physical Address (GPA) Адрес внутри виртуальной машины
Host Physical Address (HPA) Реальный адрес в памяти хоста
  • Позволяют гипервизору создавать отображение GPA → HPA
  • Работают аналогично стандартным Page Tables
  • Кэшируются в TLB и используются аппаратно
  • Позволяет выполнять виртуальные ОС почти без потерь в производительности
  • Обеспечивает изоляцию памяти между виртуальными машинами
  • Используется в Hyper-V, KVM, VMware, VirtualBox и др.

MMU — аппаратный модуль, который преобразует виртуальные адреса в физические, реализует защиту памяти, контроль доступа и т.д.

Стадия Действие
Процессор генерирует виртуальный адрес Например, при обращении к переменной
MMU ищет отображение в TLB Если найдено — используется
Если нет — обращение к Page Table Чтение соответствующей страницы
Проверка прав доступа RWX-флаги, уровень привилегий
Генерация физического адреса Передача на контроллер памяти (MC)
Компонент Назначение
TLB Кэш отображений виртуальных адресов
Page Table Основная таблица отображений
CR3 Регистр, указывающий на Page Table
PTE Page Table Entry — описание одной страницы
  • Page Fault (PF) — отсутствует отображение или запрещён доступ
  • General Protection Fault (GPF) — нарушение прав при доступе
  • DEP/NX реализуется через биты в PTE
  • ASLR — случайное размещение виртуальных адресов
  • SMEP/SMAP — защита ядра от пользовательских данных

Память ЦП — это многоуровневая, иерархическая и сложная система, включающая:

  • регистры
  • кэш-память (L1–L3)
  • оперативную память с виртуализацией (MMU)
  • NUMA и оптимизацию размещения данных
  • механизм предвыборки (prefetching)
  • аппаратную виртуализацию адресов (Intel VT-x)

Понимание всех этих слоёв особенно важно для:

  • написания высокопроизводительных приложений
  • отладки и анализа кода
  • реверс-инжиниринга и безопасности
  • reverseenengineering/память.1752679618.txt.gz
  • Последнее изменение: 2025/07/16 22:26
  • Lex