Привіт і ласкаво просимо назад. У попередніх уроках ми бачили, як виштовхувати значення у регістрах
до стеку, а також як їх витягувати. У цьому уроці я покажу вам інші способи виштовхування
даних до стеку. Ми можемо виштовхувати константи до стеку напряму. Це означає, що ми можемо безпосередньо
виштовхувати числа до стеку, а також виштовхувати рядки. Отже, коли ми виштовхуємо рядки, ми не можемо виштовхнути
рядок безпосередньо, але ми можемо виштовхнути адресу в пам'яті, де знаходяться
ці рядки. Тож давайте почнемо. Отже, спочатку ми відкриваємо шаблон 1, і
зараз я покажу вам, як виштовхувати константи до стеку. Отже, один із способів зробити це - використати
інструкцію push і безпосередньо ввести число, яке ви хочете виштовхнути до
стеку, у шістнадцятковому форматі. Отже, поставте гекс-префікс 0x, а потім, припустимо, що
ви хочете перемістити число 53 до стеку, ось як ви це зробите. Таким чином, ви можете виштовхнути його
безпосередньо до стеку. Далі ми хочемо подивитися, як ми можемо виштовхувати рядки до стеку. Отже, перш ніж ми зможемо виштовхувати рядки
до стеку, ми повинні спочатку зберегти їх у сегменті даних. Тож давайте перейдемо до карти пам'яті і подивимося
на сегмент даних, а потім прокрутимо вниз і пошукаємо порожнє місце, яке ми можемо
використати. Наприклад, ось цей. Отже, ми виділяємо все це тут, припустимо,
все це тут, а потім тут ми можемо клацнути правою кнопкою миші. Отже, ми виділяємо одне dword, два dword, три dword, чотири dword, клацаємо
правою кнопкою миші і вибираємо бінарне редагування. Там ми будемо писати
свої рядки. Тож це те, що ми робимо, щоб записати туди наші рядки. Двійкове редагування, а потім під ASCII
тут ви можете ввести, наприклад, "hello world". Привіт, світ, а потім натисніть
"ОК". І тепер ви побачите там свій рядок "hello world". Отже, якщо ви хочете виштовхнути до стеку "hello
world", ви виштовхуєте адресу першого символу, яка дорівнює 68. 68 - символ для H, 65 - символ
для E і так далі. Отже, це базується на
ASCII-коді. Тож ви можете знайти ASCII-код у Google. Прикладом тут буде ASCII таблиця. Отже, гекс-значення
можна знайти тут. Символ H можна подивитися тут, H. Малі літери h - це буде
гекс 68. Це те, що ми бачимо тут. Шестнадцяткове число 68 - це рядкова літера h. Рядкова літера e буде шістнадцятковим
значенням 65, яке ми бачимо тут, 65. Тоді L, мала літера l буде гексом 6C. Отже, 6C, L,
6C, L знову. Тут дві "л", а потім ось ця "о". Отже, O - це гекс для
цього 6F. Отже, 6F - це O. Тоді є простір. Отже, пробіл, шукайте пробіл,
пробіл, гекс 20. Космос, 20. Отже, цей простір тут позначено гексом 20. Це те, що ми
бачимо тут. Отже, гекс-значення дорівнює 20. І в кінці цього рядка ми маємо нульовий термінатор.
Отже, нульовий термінатор - це 00. Як ви можете бачити, гекс 00 дорівнює нулю. Нуль - це як крапка
в реченні. Ти повинен мати його. Усі рядки у вашій пам'яті повинні закінчуватися
нульовим термінатором 00. Це необхідно. Це потрібно для того, щоб ваша
програма знала, коли закінчується рядок. Інакше ви продовжуєте читати далі і далі, шукаючи нульового термінатора.
Нульовий термінатор - це крапка. Отже, нульовий термінатор - це 00. Оскільки за замовчуванням всі ці порожні місця вже
є 00, то в кінцевому підсумку ми отримаємо нульовий термінатор, 00. Тому дуже важливо мати нульовий
термінатор. Отже, це твоя нитка. Тож як нам проштовхнути
цей рядок до стеку? Ми натискаємо адресу першого символу, який дорівнює 403050, ось тут.
Отже, все, що вам потрібно зробити, це клацнути правою кнопкою миші тут і скопіювати цю адресу. І тут ми натискаємо, натискаємо пробіл, натискаємо,
ставимо шістнадцятковий префікс і вставляємо адресу першого символу, який дорівнює
68, тобто символ H. Натисніть OK, і тепер ви побачите там "hello world". Він буде виштовхнутий
до стопки. Тож давайте побіжимо і переступимо. Тепер він виштовхує
53 в гекс до стеку. Тож давайте переступимо, і ми побачимо 53 у стопці. Далі він виштовхне адресу,
за якою знайдено цей рядок, до стеку. Тож давайте переступимо, і тепер він виштовхнув
цю адресу до стеку: 403050, 403050. Отже, це місце розташування
початку рядка. Вам потрібно вказати лише адресу початку рядка, причому
початок рядка - це перший символ. І тоді програма сама дізнається, коли
рядок закінчується. Він буде шукати нульовий термінатор ззаду. Саме тоді він знає,
що ваша нитка тут закінчилася. Отже, ось як ви можете виштовхувати константи
і рядки до стеку за допомогою методу push. Отже, це корисно знати, тому що коли ми виконуємо
виклики функцій, нам потрібно знати, як передати параметри в стек для функції, і ми розглянемо
це в наступних лекціях. На цьому відео все. Дякуємо за перегляд.