Частина 8 - Байти, слова, подвійні слова тощо...
Для повного змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть обговорені. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial
Пам'ять вимірюється в байтах. Один байт дорівнює 8 бітам. Два байти називаються словом, а два слова — подвійним словом, яке дорівнює чотирьом байтам (32 біти), а квадрословом — вісьмома байтами (64 біти).
Один байт дорівнює 8 бітам і є 2^8 степенем, що дорівнює 256. Кількість двійкових чисел розміром 8 бітів становить 256 значень, починаючи з 0 і закінчуючи 255.
Кожен байт пам'яті в комп'ютері має свою унікальну адресу. Давайте переглянемо розібрані інструкції для простої програми «hello world» в Linux, встановивши точку зупинки на головній функції. Ми будемо використовувати відладчик GDB:
Не хвилюйтеся, якщо це ще не має сенсу. Мета використання цього прикладу — дати вам уявлення про нашу першу програму, яку ми будемо вивчати, крім вивчення пам'яті в комп'ютері.
Нижче наведено огляд регістру ESP. Знову ж таки, не обов'язково розуміти, що таке регістр або що робить ESP. Ми просто хочемо побачити, як виглядає місце в пам'яті:
Ми бачимо розташування пам'яті 0xffffd040, яке, звичайно, є шістнадцятковим. Ми також бачимо значення всередині регістру ESP, яке дорівнює 0xf7fac3dc, що також є шістнадцятковим.
Важливо розуміти, що 0xffffd040 — це 4 байти і подвійне слово. Як ми дізналися в частині 6: Шістнадцяткова система числення, кожна шістнадцяткова цифра має довжину 4 біти, інакше звана ніблом. У 0xffffd040 давайте подивимося на крайню праву цифру 0. У цьому прикладі 0 (шістнадцяткове) має довжину 4 біти. Якщо ми подивимося на 40 (в шістнадцятковій системі числення), то побачимо, що це байт або 8 бітів. Якщо ми подивимося на d040, то побачимо два байти або слово. Нарешті, ffffd040 є подвійним словом або 4 байтами, що дорівнює 32 бітам. 0x на початку адреси просто позначає, що це шістнадцяткове значення.
Комп'ютерна програма — це не що інше, як машинні інструкції, що зберігаються в пам'яті. 32-бітний процесор витягує подвійне слово з адреси пам'яті. Подвійне слово — це 4 байти поспіль, які зчитуються з пам'яті і завантажуються в процесор. Як тільки воно закінчує виконання, процесор витягує наступну машинну інструкцію в пам'яті з покажчика інструкцій.
Ті з вас, хто тільки починає вивчати асемблер, тепер отримали перше уявлення про нього. Не турбуйтеся і не розчаровуйтеся, якщо ви не розумієте, що тут відбувається. Ми не поспішатимемо і розглянемо десятки прикладів, щоб розібрати кожен крок у наступних уроках. Важливо, щоб ви не поспішали і уважно вивчали матеріал кожного уроку. Будь ласка, завжди залишайте свої коментарі та запитання нижче.
У наступному уроці ми обговоримо основи архітектури x86.