Привіт і ласкаво просимо назад.
Тепер ми зробимо три параметри.
Отже, функція тепер має параметр один, параметр два і параметр три.
Отже, коли ви виконаєте перетворення, ця функція стане збіркою, і ви отримаєте параметри, що проштовхуються у зворотному порядку:
спочатку проштовхніть параметр три, а потім проштовхніть параметр два, проштовхніть параметр один.
І нарешті, викличте функцію.
Отже, основний принцип виклику x86 полягає в тому, що порядок натискання параметрів - справа
наліво, як ви можете бачити тут.
Тож давайте спробуємо виконати вправу на прикладі.
Тому зараз я хочу, щоб ви поставили відео на паузу, якщо хочете, і спробували вирішити цю задачу самостійно, перш ніж дивитися
на рішення.
Тож удачі.
Гаразд.
Зараз я покажу вам, як я це вирішую.
Отже, є три параметри.
Параметр перший.
Параметр два.
Параметр три.
Отже, нам потрібно три комірки пам'яті, тому що у нас три рядки.
Відкриваємо перший шаблон.
І перейдіть до карти пам'яті.
Натисніть на сегмент даних і знайдіть три місця.
Ми будемо використовувати 3050, 3060
і 3070.
Отже, 3050
ми зберігатимемо рядок 2; 3060
- рядок 1; і 3070 - "Hello" та
специфікатор формату.
Отже, спочатку обираємо 3050.
Якщо ми виберемо більше слів, ніж потрібно, нічого страшного.
Тому я виберу всі три слова, хоча нам не потрібно так багато часу, і просто клацну тут правою кнопкою
миші.
3050, Binary Edit, і у вікні введення тексту ASCII я введу своє прізвище, а саме: Chin, C-H-I-N.
За допомогою стрілки "назад" перейдіть ліворуч і натисніть "Підборіддя" або власне ім'я, якщо бажаєте.
А потім натисніть
"Гаразд".
Тепер у мене є друга струна.
Потім я виберу цю наступну область в пам'яті, щоб зберегти ім'я Павла.
Отже, я клацаю правою кнопкою миші, "Двійкове редагування" і натискаю тут. Стрілка назад, щоб перейти в крайній лівий рядок і ввести своє ім'я, і я натискаю
Okay.
Далі я виберу наступну ділянку пам'яті для зберігання рядків специфікатора формату.
Отже, я клацаю правою кнопкою миші тут, "Бінарне редагування", і натискаю сюди.
І я вводжу рядок:
"Hello, " (кома, пробіл) %s для рядка, пробіл, знову %s для рядка.
Отже, мені потрібно два специфікатори формату, тому що у цьому випадку ми маємо рядок один і рядок два.
Коли викликається ця річ, ця функція замінить перший специфікатор формату на рядок
один, а потім замінить другий специфікатор формату на рядок два.
Таким чином, ми отримаємо рядок:
"Привіт, Пол Чин. Тепер ми можемо
зібрати наш код.
Натискаємо сюди і вводимо "push. Але перш ніж ми це зробимо, просто
скопіюйте адресу.
Спростіть збереження набору тексту.
Скопіюйте цю адресу для третього параметра.
Скопіюй адресу.
Натисни сюди.
Натисни пробіл.
Натисніть hex і вставте адресу.
Тепер у мене тут друге ім'я.
Потім ми копіюємо адресу другого параметра, який є рядком one.
Скопіюй адресу.
Натисни сюди.
Пробіл.
Натисніть
hex і вставте адресу.
Гаразд.
А тепер наступний крок - це ваш специфікатор формату.
Отже, давайте скопіюємо формат, адресу, яка є параметром один. Клацніть правою кнопкою миші, Копіювати адресу, натисніть тут, клацніть,
натисніть пробіл, введіть "push hex" і вставте адресу.
Гаразд.
І тепер у нас є третій параметр, другий
параметр, перший
параметр.
Тепер ми готові викликати нашу функцію printf.
Тож давайте прокрутимо вниз і знайдемо виклики функцій, а потім двічі клацнемо, щоб перейти до таблиці переходів.
Тепер ми знаходимося у таблиці переходів для викликів функцій.
Знайдіть printf і скопіюйте його адресу звідси.
Клацни правою кнопкою миші.
Скопіюй адресу.
Повернімося до покажчика інструкцій і двічі клацніть його, а потім прокрутіть вниз і клацніть на
цьому місці.
Місце для преси.
Викличте hex і вставте вашу адресу для функції printf.
Гаразд.
Тож тепер ви готові.
Не забудьте поставити тут точку зупинки.
І біжи.
Зараз наша програма працює.
Отже, крок over виштовхне третій параметр до стеку.
Давай переступимо.
Параметр вже знаходиться у стеку.
Потім він натисне на другий параметр.
Давай переступимо.
Другий параметр знаходиться у стеку. Це підштовхне перший параметр. Перейдіть, і перший параметр опиниться
у стеку.
Тепер у нас є параметр один, параметр два, параметр три - все готово для нашого виклику функції
printf.
Тепер ми переступимо через функцію printf і подивимося на її вивід. Переступаєш поріг, і він друкує: "Привіт, Пол Чін. Ось як можна написати код на асемблері
для виклику функції, яка приймає три параметри.
Тепер збережемо цей файл.
Патч, патч-файл.
Назвемо це 18.
Вправа 18-функція-три.
exe. Натисніть "Зберегти".
На цьому відео все.
Дякуємо за перегляд.