Привіт і ласкаво просимо назад.
У цій лекції я поясню вам, що таке регістри.
Отже, регістри знаходяться всередині - це компонент всередині самого процесора.
А ось хороша схема, яка показує взаємозв'язок між різними частинами всередині процесора.
У вас є регістри, арифметичні логічні одиниці, програмний лічильник і багато, багато інших компонентів.
І це дуже спрощена схема, щоб її було легше зрозуміти.
Отже, всередині регістрів ви знайдете всі ці надшвидкі комірки пам'яті, які можуть зберігати дані та інструкції.
Отже, тут ви бачите, що у вас є EAX, EBX, ECX, EDX і компоненти, підрозділ кожного з регістрів
у вас є AX, BX, CX,
DX і може бути далі поділений.
Отже, все це вилітає з касового апарату, який ви бачите тут.
А ще процесор спілкується з пам'яттю.
А пам'ять - це оперативна пам'ять.
Саме тут зберігаються дані, які завантажуються в процесор під час виконання програми,
а також записуються назад у пам'ять, коли процесор завершує виконання певних інструкцій.
І як це виглядає всередині вашого xdebug у вашому xdebug ось тут, праворуч - це ваш реєстр.
EAX
EBX
ECX EDX
EBP ESP
EDI та EIP.
Отже, ця частина тут представляє всі реєстри, все це.
А потім пам'ять тут.
Пам'ять тут представлена внизу.
Сюди.
Давайте подивимось на xdbg в реальному часі і побачимо краще.
Отже, ось тут - ваші регістри, а тут - ваша пам'ять.
Отже, ви можете перейти до мапи пам'яті, потім вибрати вашу ділянку пам'яті X, клацнути правою кнопкою миші і вибрати пункт "Дамп".
І ви можете побачити тут свою пам'ять.
Тож це ваша жива пам'ять.
Це процес, який триває.
А це вигляд пам'яті всередині процесу, який виконується.
Отже, цей дамп пам'яті тут на схемі представлений, ось ця частина.
Тож зараз ми розглянемо кожен з цих реєстрів і трохи вивчимо
їх.
Отже, всі регістри в основному відомі як регістри загального призначення, тому що їх можна використовувати
для будь-яких цілей, не обов'язково для розрахунків, лічильників або даних, хоча спочатку історично вони мали конкретне специфічне
застосування.
Отже, чотири основні: EAX EBX
ECX
і EDX Внутрішня
структура кожного
регістра.
Отже, ми говоримо про 32-розрядні регістри.
Отже, EAX - це DWORD, тобто чотири байти.
Чотири байти - це 32 біти, і тоді ви можете розділити EAX навпіл.
Отже, нижня половина відома як AX.
AX - це слово, тобто два байти або 16 біт.
А потім ви можете додатково розділити AX на більшу і меншу h для більшого або меншого.
AH - це байт, а AL - також байт.
Таке повне.
Загалом, у вас є чотири байти: один, два і потім три чотири.
Отже, чотири байти на 32 бітовий регістр.
Візьмемо приклад.
Якщо припустити, що EAX зберігає це значення, то 0x означає, що це шістнадцяткова система числення.
Припустимо, що він зберігає ці байти 12345, 678.
Отже, AX буде 5678.
Чим меншими будуть молодші два байти AH, тим більшим буде старший байт.
П'ять шість - це AH.
AH - це п'ять, шість і AL - молодші байти.
Сім вісім.
Тому кожен з них вважається одним байтом.
Так.
Один два - один на три, чотири - ще один байт, п'ять - ще один байт, шість - ще один байт, сім - ще
один байт, вісім
- ще один байт.
Таким чином, у вас залишилося чотири байти.
Тепер така ж схема застосовується і до решти реєстрів.
Наприклад, для регістра EBX його можна розділити на два.
Нижня половина - це BX, тому і і BX можна розділити на дві частини, BH і BL.
Так само, наприклад, якщо EBX зберігає шістнадцяткове значення 12345678, то BX буде п'ять, шість,
сім вісім, BH буде п'ять шість і BL буде сім вісім.
Тож те ж саме стосується і всього іншого.
Навіть для ECX і EDX ми можемо розділити x на дві частини, а потім розділити CX на CH і CL, і так
само EDX.
Ви можете розділити його на дві частини.
Нижня частина - це DX, а далі DX можна розділити на DH і DL.
Потім у нас також є 64-розрядні регістри, 64-розрядні регістри.
Ми позначаємо його символом R попереду.
Тому замість EAX ми маємо RAX, а замість EBX - RBX, а замість ECX - RCX і так далі.
Отже, ми просто замінюємо E на R і отримуємо 64-бітний регістр. Для цього курсу.
Ми будемо вивчати тільки 32 бітні регістри.
Отже, RAX - це QWORD. ЧОТИРИ СЛОВА. Отже, QWORD, яке насправді є вісьмома байтами або 64 бітами, і
тоді RAX можна розділити на старший і молодший на дві частини.
Нижня частина називається EAX, а EAX - це, як ви знаєте, DWORD, тобто чотири байти, і EAX можна розділити
на AH і AL.
І як і раніше.
Існують також інші реєстри.
Реєстри ESI, EDI, EIP, ESP та EBP.
Зараз ESI і EDI
традиційно використовуються для зберігання рядків, коли ви копіюєте рядки з одного місця
в інше.
Традиційно ви використовуєте ESI для зберігання джерела рядка, з якого ви хочете скопіювати.
І традиційно, EDI буде використовуватися для зберігання місця призначення рядка, куди ви збираєтеся копіювати.
І тоді ESI можна поділити на вищий і нижчий.
Отже, нижня частина називається СІ, і вона не може бути далі поділена.
У вас немає S вище і S нижче.
А ще у нас є вказівник інструкцій EIP.
Вказує на пам'ять поточної адреси поточної інструкції.
Таким чином, EIP зберігає інструкцію, яка в даний момент буде виконана.
Наприклад, тут EIP зараз має таку адресу 4014C0, яка знаходиться тут, як ви можете бачити.
Отже, коли ви переходите, зверніть увагу, що EIP зміниться, тепер це 4014C3, який знаходиться тут, і продовжуйте
переходити, тепер це 4014 CD, який знаходиться тут, 4014 CD.
Отже, EIP просто вказує на місце розташування наступної інструкції, яка буде виконана.
Це і є призначенням вказівника інструкцій, EIP.
А ще у нас є те, що називається покажчиками стека кадрів, ESP і EBP.
ESP використовується для вказівки на вершину стека.
Це означає, що він містить адресу вершини стека та EBP.
Для спрощення EBP зберігає адресу внизу стека.
Тож подивіться на це, на цей приклад.
Отже, припустимо, що у вас є стек, і тоді EBP вказуватиме на нижню частину стека, а точніше на його верхню частину.
Таким чином, кожного разу, коли ви виштовхуєте щось до стеку, esp буде зменшуватись, а воно буде збільшуватись у пам'яті.
Отже, внизу - більша пам'ять, а вгорі - менша область пам'яті.
Так воно і відбувається, воно росте у зворотному напрямку.
І якщо ви подивитеся на це в XBG тут, то EBP буде внизу, а ESP буде зверху.
Те ж саме тут.
EBP буде внизу.
ESP буде на вершині.
У зворотному порядку.
Це і є метою ПЕП та ПЕБ.
Тому я поясню більш детально про фрейми стека пізніше, коли ми перейдемо до цього уроку.
Тож тепер ви дізнаєтеся, що таке ESP та EBP і як вони використовуються?
Для чого він використовується?
На цьому ми завершуємо цей урок.
Це все, з чим я хочу вас познайомити.
Що означають всі ці символи і як вони пов'язані з процесором.
Отже, у наступному уроці ми розглянемо кілька практичних прикладів написання коду з використанням
усіх цих регістрів.
На цьому відео все.
Дякуємо за перегляд.