Привіт і ласкаво просимо назад.
У цьому розділі ми поговоримо про конвенції виклику.
Виклик конвенцій - це передача параметрів у функції.
Виклик конвенцій складається з трьох різних методів.
Перший - через реєстри.
Другий - через купу, також відому як глобальні дані, і третій - через стек.
Отже, це три способи передачі параметрів у функції перед викликом функції.
Ми розглянемо на прикладі, як розв'язати рівняння Y дорівнює MX плюс
C, якщо M дорівнює п'яти, X дорівнює десяти, а C дорівнює трьом.
І ми будемо використовувати всі три різні способи звертання, щоб ви могли зрозуміти різницю
між ними.
Перший - через реєстри, і ми маємо на увазі саме цю частину.
Отже, у нас є дві функції.
У нас є головна функція і є дочірня функція.
Головна функція - це те місце, де ви будете викликати функцію.
Ось тут ви побачите, що є дзвінок на цю адресу.
І ця адреса є початком функції. Перед викликом функції потрібно задати параметри, які
ви збираєтеся використовувати, які будуть використовуватися функцією.
Отже, в даному випадку параметри такі: ви передасте п'ять на -, десять на - і три на -.
Отже, тут ви використовуєте регістри для передачі параметрів функції.
Отже, у цьому випадку п'ять буде п'ятьма для змінної M, десять - десятьма для змінної X,
а три - трьома для змінної C.
Отже, коли ви вже налаштували регістри, ви можете викликати функцію.
Отже, тут ви викликаєте функцію, а потім інструкція переходить до адреси функції
ось тут.
І ось тут ви починаєте робити розрахунки.
Перше, що ви зробите, це перемістите - в -, тобто перемістите значення M в -, потім
помножите - на - і збережете результат назад в -.
А тут додаємо - до -.
Це все одно, що додати C до -.
Тож сюди.
Тут налаштовано - бути.
Тут ви, а тут ви множите M на X і зберігаєте результат у -,
а тут ви додаєте C до -.
І, нарешті, ви повертаєтеся до абонента.
Отже, це місце, де ви телефонуєте за допомогою реєстрів.
Отже, давайте розглянемо x64dbg.
Тож я вже створив програму під назвою 70-тире-реєстр-тире-виклик-тире-конвенція.
Все, що я зробив, це просто відкрив шаблон і ввів всі ці інструкції тут, а також додав у печеру
коду.
Тут я виконую свою функцію.
Тож ви можете зробити те саме.
Просто відкрийте x64dbg і введіть всі ці дані відповідно.
Так що це в основній функції.
Це в печері коду.
Давайте спробуємо поставити точку зупинки, запустити її і простежити трасування.
Отже, тут ми поставимо брейк-поінт.
Перемикаємо брейк-поінт і біжимо.
І він потрапляє в наш брейк-пойнт.
Отже, тепер ми налаштовуємо регістри для виклику функції.
Отже, ми переносимо п'ять на -.
- п'ять у -.
Тепер ми перемістимо десять на -.
Це шістнадцяткова цифра A, що означає десять.
Переступаємо, і пересуваємо десять на -.
Потім ми перенесемо три на -.
Тож ми переступаємо, і тепер три на "-".
Отже, в цей момент часу регістри завантажені всіма початковими значеннями, які будуть використовуватися
вашою функцією.
Ось що означає передача параметрів у функції за допомогою регістрів.
Тож зараз ми збираємося відповісти на цей заклик.
Тож давайте почнемо.
А тепер ми перейшли до печери коду, де знаходиться функція.
Перше, що ми робимо, це переходимо з - в -, тож давайте переступимо.
А тепер - має п'ять.
Далі ми будемо множити - на -.
Отже - десять.
Отже, ви візьмете десять,
помножите на п'ять.
Отже, п'ять - це M, десять - це X, тобто M помножити на X.
Тож переступайте, і ви отримаєте результат "-".
Потім ви додаєте - до -. - отримала значення three, яке є змінною C.
Отже, тепер ви додаєте його до -, і отримуєте 35 в -, тоді ви повернетеся.
Тож переступайте, і ви повернетесь за адресою після дзвінка.
На даний момент часу - матимемо результат.
Отже, як ви вже бачили раніше, 35 - це 53 в десятковій системі числення.
Отже, наша відповідь правильна.
Ось як ми використовуємо регістри для передачі параметрів у функцію.
Це все для цього відео.
У наступній частині ми розглянемо другий спосіб передачі
параметрів у функцію - через купу.
Тож до наступної зустрічі.
Дякуємо за перегляд.