Розділ 10: Регістри загального призначення

Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial

Загальні регістри використовуються для тимчасового зберігання даних під час обробки процесором. Регістри значно змінилися протягом часу і продовжують змінюватися. Ми зосередимо увагу на 32-бітній архітектурі x86 для своїх цілей. Кожна нова версія загальних регістрів створюється для забезпечення сумісності з попередніми процесорами. Це означає, що код, який використовує 8-бітові регістри на чипах 8080, ще працюватиме на сучасному 64-бітному чипсеті. Загальні регістри можна використовувати для зберігання будь-якого типу даних, деякі з яких мають спеціальне використання, яке використовується в програмах. Давайте переглянемо 8 загальних регістрів в архітектурі IA-32.

EAX: Основний регістр, що використовується в арифметичних обчисленнях. Також відомий як акумулятор, оскільки він зберігає результати арифметичних операцій і значення повернення функцій.

EBX: Базовий регістр. Покажчик на дані в сегменті DS. Використовується для зберігання базової адреси програми.

ECX: Регістр лічильника часто використовується для зберігання значення, що представляє кількість повторень процесу. Використовується для циклічних і рядкових операцій.

EDX: Регістр загального призначення. Додатково використовується для операцій вводу-виводу. Крім того, розширює EAX до 64 бітів.

ESI: Регістр індексу джерела. Покажчик на дані в сегменті, на який вказує регістр DS. Використовується як адреса зміщення в операціях з рядками та масивами. Він містить адресу, з якої слід читати дані.

EDI: Регістр індексу призначення. Покажчик на дані (або призначення) в сегменті, на який вказує регістр ES. Використовується як адреса зміщення в операціях з рядками та масивами. Він містить імпліцитну адресу запису всіх операцій з рядками.

EBP: Базовий покажчик. Покажчик на дані в стеку (у сегменті SS). Він вказує на нижню частину поточного стекового кадру. Використовується для посилання на локальні змінні.

ESP: Покажчик стеку (у сегменті SS). Він вказує на верхню частину поточного стекового кадру. Використовується для посилання на локальні змінні.

Майте на увазі, що кожен з вищезазначених регістрів має довжину 32 біти або 4 байти. Кожен з нижніх 2 байтів регістрів EAX, EBX, ECX та EDX може бути позначений як AX, а потім поділений на імена AH, BH, CH та DH для верхніх байтів і AL, BL, CL та DL для нижніх байтів, кожен з яких має розмір 1 байт.

Крім того, ESI, EDI, EBP та ESP можуть бути позначені їх 16-бітними еквівалентами, а саме SI, DI, BP, SP.

Це може бути дещо заплутаним для тих, хто не вивчав комп'ютерну інженерію, проте дозвольте мені проілюструвати це в таблиці нижче:

EAX матиме AX як 16-бітний сегмент, а потім ви можете додатково поділити AX на AL для нижніх 8 бітів і AH для верхніх 8 бітів. Те саме стосується EBX, ECX і EDX. EBX матиме BX як 16-бітний сегмент, а потім ви можете додатково поділити BX на BL для нижніх 8 бітів і BH для верхніх 8 бітів. ECX матиме CX як 16-бітний сегмент, а потім ви можете додатково поділити CX на CL для нижніх 8 бітів і CH для верхніх 8 бітів. EDX матиме DX як 16-бітний сегмент, а потім ви можете додатково поділити DX на DL для нижніх 8 бітів і DH для верхніх 8 бітів.

ESI, EDI, EBP і ESP можна розділити на 16-бітні сегменти наступним чином:

ESI матиме SI як свій 16-бітний сегмент, EDI матиме DI як свій 16-бітний сегмент, EBP матиме BP як свій 16-бітний сегмент, а ESP матиме SP як свій 16-бітний сегмент.

У наступній частині ми продовжимо обговорення архітектури IA-32 з сегментними регістрами.

results matching ""

    No results matching ""