reverseenengineering:регитсры

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
reverseenengineering:регитсры [2025/07/01 17:30] – [Регистр флагов RFLAGS] Lexreverseenengineering:регитсры [2025/07/04 17:33] (текущий) – [Регистры общего назначения] Lex
Строка 49: Строка 49:
 ===== Регистры общего назначения ===== ===== Регистры общего назначения =====
  
-^ Имя регистра  ^ Описание:Обозначение                                               |Назначение  |+^ Имя регистра  ^ Описание:Обозначение                                               ^Назначение  ^
 | EAX           | Аккумулятор (Accumulator)                                          | Арифметические и логические операций. | | EAX           | Аккумулятор (Accumulator)                                          | Арифметические и логические операций. |
 | EBX           | База (Base)                                                        | Применяется как указатель на данные. Используется для хранения данных и может использоваться как базовый регистр при адресации памяти.| | EBX           | База (Base)                                                        | Применяется как указатель на данные. Используется для хранения данных и может использоваться как базовый регистр при адресации памяти.|
Строка 62: Строка 62:
  
 > При переходе к 64-битным регистрациям, 32-битные регистры (например, EAX) включены в более широкий регистр — RAX. В случае регистра RAX, младшие 32 бита этого регистра являются регистром EAX. > При переходе к 64-битным регистрациям, 32-битные регистры (например, EAX) включены в более широкий регистр — RAX. В случае регистра RAX, младшие 32 бита этого регистра являются регистром EAX.
 +
 +> Таким образом, 8-битные регистры AH и AL всё также сохраняют свою функциональность и доступны в составе более широких регистров новых архитектур.
 ==== EBX ==== ==== EBX ====
  
 > EBX (base register). Применяется как указатель на данные в сегменте данных и для хранения адресов. > EBX (base register). Применяется как указатель на данные в сегменте данных и для хранения адресов.
 +
 +> Один из восьми основных регистров общего назначения в архитектуре x86 и x86-64 процессоров Intel. Это 32-битный регистр, расширенная версия 16-битного регистра BX. BX, в свою очередь, состоит из двух 8-битных регистров: BH (старший байт) и BL (младший байт).
 +
 +> Регистр EBX используется для хранения базового адреса, относительно которого вычисляются адреса других данных в памяти. Это может быть адрес начала структуры данных, массива или любой другой области памяти. Относительно этого адреса вычисляются смещения для доступа к конкретным элементам данных.
 +
 +> **Доступ к элементам массива.** Регистр EBX содержит адрес начала массива, ebx + 4 указывает на второй элемент массива, который загружается в EAX, ebx + 8 — на третий элемент массива, который добавляется к значению в EAX.
 +
 +> **Работа со структурами.** Регистр EBX содержит адрес структуры, используется для доступа к полям структуры: первое поле — по адресу EBX, второе поле — по адресу ebx + 2.
 +
 +> **Индексная адресация.** Регистр EBX содержит адрес начала массива, регистр ECX используется как индекс, и ebx + ecx*4 вычисляет адрес третьего элемента массива (поскольку каждый элемент занимает 4 байта). Значение третьего элемента загружается в EAX.
 +
 +
 ==== ECX ==== ==== ECX ====
  
 > ECX (count register). Традиционно используется в циклах как счетчик итераций. > ECX (count register). Традиционно используется в циклах как счетчик итераций.
  
 +> Один из основных регистров общего назначения в архитектуре x86 и x86-64 процессоров Intel. Это 32-битный регистр, расширенная версия 16-битного регистра CX (Count Register). 
 +
 +> Регистр ECX состоит из двух 8-битных регистров: CH (старший байт) и CL (младший байт).
 +
 +> Счётчик циклов — регистр ECX часто используется как счётчик в циклах, особенно в инструкциях повторения (REP).
 +
 +> Указание количества сдвигов или вращений — младший байт регистра ECX (CL) используется для указания количества сдвигов или вращений в соответствующих инструкциях (например, SHL, SHR, ROL, ROR).
 +
 +> Передача аргументов — в некоторых соглашениях о вызовах функций (calling conventions) регистр ECX используется для передачи аргументов.
 +
 +> Пример использования как счётчик циклов: Регистр ECX устанавливается в 5, затем в цикле выполняются операции с элементом массива: увеличивается значение текущего элемента на 1, переходит к следующему элементу. В конце цикла ECX уменьшается на 1, и если ECX не равен нулю, управление передаётся к началу цикла.
 +
 +> Пример использования в сдвиговых операциях: Регистр ECX устанавливается в 4, затем значение загружается в EAX, и EAX сдвигается влево на количество бит, указанное в CL (4 бита).
 +
 +> Ограничения: Регистр ECX не имеет заданного наперёд типа — он может трактоваться как знаковые или беззнаковые целые числа, указатели, булевые значения и так далее. В некоторых соглашениях о вызовах регистр ECX может быть регистром scratch (call clobbered) — это означает, что он не сохраняется при вызовах функций.
 ==== EDX ==== ==== EDX ====
  
 > EDX (data register). Дополняет eax в операциях умножения и деления, а также участвует в операциях ввода-вывода. > EDX (data register). Дополняет eax в операциях умножения и деления, а также участвует в операциях ввода-вывода.
  
 +> Регистр данных, который используется для хранения результатов промежуточных вычислений и ввода-вывода.
 +
 +> Арифметические операции: При умножении 32-битных чисел результат сохраняется в паре регистров EDX:EAX (старшие 32 бита в EDX, младшие — в EAX).При делении 32-битного числа на 32-битный делитель остаток записывается в EDX, а частное — в EAX.
 +
 +> Ввод-вывод: EDX служит для хранения адреса порта ввода-вывода в командах IN и OUT.
 +
 +> Соглашения о вызовах: В некоторых соглашениях (например, __fastcall) EDX используется для передачи второго параметра функции.
 +
 +> Логические операции: EDX может участвовать в побитовых операциях (AND, OR, XOR) и использоваться для хранения промежуточных данных.
 +
 +> Разделение на части: EDX можно обращаться как к 16-битному регистру DX (старшие 16 бит) и 8-битным DH (старший байт) и DL (младший байт).
 +
 +> Совместимость с другими регистрами: EDX часто используется в паре с EAX, особенно в 32-битных операциях. 
 +
 +> Регистр EDX остается важным элементом в низкоуровневом программировании, обеспечивая эффективное выполнение арифметических операций и взаимодействие с аппаратными компонентами. Его гибкость и специализированные функции делают его незаменимым в ассемблерном коде.
 +==== RAX (Accumulator Register) ====
 +
 +> Используется для арифметических, логических операций и операций ввода-вывода.
 +
 +> 64-битный регистр в архитектуре процессоров x86-64. Представляет собой расширенную версию 32-битного регистра EAX. 
 +
 +> Структура регистра: 
 +>> RAX (64 бита) — основной регистр.
 +>> EAX (32 бита) — нижние 32 бита регистра RAX.
 +>> AX (16 бит) — нижние 16 бит регистра EAX.
 +
 +> При использовании регистра RAX меняется значение всех трёх частей, а изменение значения подрегистра влияет только на соответствующую часть большего регистра.
 +
 +> Регистр RAX используется для выполнения арифметических и логических операций. Также он применяется для: 
 +
 +>> Перемещения данных — RAX часто используется как операнд для различных инструкций. 
 +
 +>> Хранения возвращаемых значений — в большинстве соглашений о вызовах функций для 64-битных систем регистр RAX используется для хранения возвращаемых значений.
 +
 +
 +==== RBX (Base Register) ====
 +> Используется для хранения данных и может использоваться как базовый регистр при адресации памяти.
 +==== RCX (Counter Register) ====
 +> Используется в операциях цикла и как счетчик в командах REP и LOOP.
 +==== RDX (Data Register) ====
 +> Используется в арифметических операциях, особенно в умножении и делении.
 +==== RSI (Source Index) ====
 +> Используется для указания на исходный адрес при операциях с памятью (например, при копировании данных).
 +==== RDI (Destination Index) ====
 +> Используется для указания на адрес назначения при операциях с памятью.
 +==== R8-R15 (Дополнительные регистры) ====
 +> Введены в 64-разрядной архитектуре, используются для хранения данных и промежуточных значений.
 +
 +===== Специальные регистры =====
 +==== RSP (Stack Pointer) ====
 +> Указывает на вершину стека.
 +==== RBP (Base Pointer) ====
 +> Используется для доступа к параметрам и локальным переменным в стеке.
 +==== CS (Code Segment) ====
 +> Хранит базовый адрес сегмента кода в ОЗУ, откуда процессор считывает команды для выполнения. Если проводить аналогию между кодом и книгой, то CS указывает на номер страницы в книге (программе)
 +==== RIP (Instruction Pointer) ====
 +> Указывает на следующую инструкцию, которую должен выполнить процессор. Если проводить аналогию между кодом и книгой, то RIP указывает на номер строки на странице, которая указана в CS.
 +==== FLAGS (или RFLAGS в 64-разрядной системе) ====
 +> Хранит флаги состояния процессора, отражают состояние различных аспектов выполнения инструкций процессора, таких как результаты арифметических операций, наличие переноса, знак числа, флаги нуля, переполнения и др. Они предназначены для управления логикой выполнения программы, исходя из текущего состояния выполнения инструкций процессора.
 ===== Указательные и индексные регистры ====== ===== Указательные и индексные регистры ======
  
Строка 80: Строка 168:
 | ESI           | Индекс источника (Source index)                                    | Указатель на источник при операциях с массивом. Исполняет в инструкции по перемодуляции памяти.  | | ESI           | Индекс источника (Source index)                                    | Указатель на источник при операциях с массивом. Исполняет в инструкции по перемодуляции памяти.  |
 | EDI           | Индекс приёмника (Destination index)                               | Указатель на место назначения в операциях с массивами. Исполняет в инструкции по перемодуляции памяти.| | EDI           | Индекс приёмника (Destination index)                               | Указатель на место назначения в операциях с массивами. Исполняет в инструкции по перемодуляции памяти.|
-| FLAGS,EFLAGS,RFLAGS        | Регистр флагов (Flag)                               | Содержит биты состояния процессора|+| FLAGS,EFLAGS,RFLAGS        | Регистр флагов (Flag)                                 | Содержит биты состояния процессора|
 | EIP           | Указатель команд.                                                  | Указатель адреса следующей инструкции для выполнения. Не регистр а указатель на текущую функцию.| | EIP           | Указатель команд.                                                  | Указатель адреса следующей инструкции для выполнения. Не регистр а указатель на текущую функцию.|
 | СS            | Хранение базовых адресов (Code Segment)                            | Хранение базовых адресов сегмента кода в ОЗУ, откуда процессор считывает команды для выполнения. Если проводить аналогию между кодом и книгой, то CS указывает на номер страницы в книге (программе)| | СS            | Хранение базовых адресов (Code Segment)                            | Хранение базовых адресов сегмента кода в ОЗУ, откуда процессор считывает команды для выполнения. Если проводить аналогию между кодом и книгой, то CS указывает на номер страницы в книге (программе)|
-| DS            | (Data Segment Register)                                            |              +| DS            | (Data Segment Register)                                            | Соответствует сегменту данных, с которыми работает процессор             
-| ES            | (Extra Segment Register)                                                        +| ES            | (Extra Segment Register)                                           Соответствует дополнительному сегменту данных             
-| FS            | (Additional Segment Registers)                                                  +| FS            | (Additional Segment Registers)                                     6-битный регистр хранения селекторов             
-| GS            | (Additional Segment Registers)                                                  +| GS            | (Additional Segment Registers)                                     6-битный регистр хранения селекторов             
-| SS            | (Stack Segment Register)                                                        |+| SS            | (Stack Segment Register)                                           Соответствует сегменту стека             |
 | RAX           | (Accumulator Register)                                             | Арифметические, логические операций и операций ввода-вывода.| | RAX           | (Accumulator Register)                                             | Арифметические, логические операций и операций ввода-вывода.|
 | RBX           | (Base Register)                                                    | Хранение данных и иногда используется как базовый регистр при адресации памяти. | | RBX           | (Base Register)                                                    | Хранение данных и иногда используется как базовый регистр при адресации памяти. |
-| AX            |                                                                    |              +| AX            |                                                                    | Младший регистр EAX. Умножение, деление, обмен с устройствами ввода/вывода (команды ввода и вывода).            | 
-| AH            |                                                                    |              +| BX            |                                                                    | Базовый регистр в вычислениях адреса             | 
-| AL            |                                                                    |              +| CX            |                                                                    | Счетчик циклов             | 
-| B, BH, BL                                                                        |              +| DX            |                                                                    | Определение адреса ввода/вывода             
-| SP, BP, SI, DI|                                                                    |              +| AH            |                                                                    | high AX - старшая половина 8 бит, содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита             
-| SPL, SDL, SIL, DIL|                                                                                 +| AL            |                                                                    | low AX — младшая половина 8 бит, содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита             
-| RxD, RxW, RxB|                                                                                 +| B, BH, BL                                                                        | Младшая часть старших 16-битных регистров в архитектуре x86             
-| A              |                                                                    |              | +| SP, BP, SI, DI|                                                                    | 64-битный             
-| B,C,D,E,H,             |                                                                    |              | +| SPL, SDL, SIL, DIL|                                                                64-битный             
-| DC              |                                                                                 +| RxD, RxW, RxB|                                                                     64-битный             
-| SP              |                                                                                 +| A              |                                                                   |              | 
-| LDA              |                                                                    |              |+| B,C,D,E,H,             |                                                         |              | 
 +| DC              |                                                                  6-битный регистр хранения селекторов             
 +| SP              |                                                                  16-битный, содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита             
 +| LDA              |                                                                 |              |
 |                                                                                  |              | |                                                                                  |              |
 |                                                                                  |              | |                                                                                  |              |
  • reverseenengineering/регитсры.1751365851.txt.gz
  • Последнее изменение: 2025/07/01 17:30
  • Lex