Привіт і ласкаво просимо назад.
Тепер ми розглянемо функції, які повертають значення.
Прикладом може бути довжина рядка.
Отже, функція довжини рядка отримує рядок як параметр, потім підраховує кількість символів
у рядку і повертає результат у вигляді числа.
Отже, ви бачите, що тип, який повертається, - size_t, тобто ціле число.
У програмі на C довжина рядка буде використовуватися таким чином.
Ви передаєте сам рядок як параметр, і тоді функція string length підрахує кількість
символів у рядку і поверне довжину рядка.
І ви можете зберігати його у змінній.
Отже, давайте спробуємо реалізувати це в x64dbg і подивимося, як це працює.
Отже, відкриваємо наш перший шаблон, і припустимо, що ми хочемо порахувати кількість символів у рядку "Hello world.
Отже,
спочатку нам потрібно знайти ділянку пам'яті, де ми можемо зберігати наш рядок.
Тож перейдемо до карти пам'яті і подивимося на дані.
Чому?
Чому дані?
Тому що це ініціалізовані дані, які ми будемо використовувати.
Ми будемо зберігати рядок, а не вводити його від користувача.
Ось чому ми використовуємо розділ даних.
Отже, тепер ми маємо цей розділ даних тут.
Знайдемо порожнє місце і покладемо туди наш рядок.
"Привіт, світе".
Дозвольте мені просто показати вам, що ми намагаємося зробити.
Ми використаємо функцію довжини рядка для підрахунку кількості символів у рядку "Hello World. Отже, ця довжина рядка підрахує кількість символів
у "Hello world," і поверне значення та збереже його
десь.
Зазвичай, коли функція щось повертає, вона зберігає це в регістрі -.
Подивимось.
Дозвольте мені показати вам, як це працює.
Отже, зараз ми просто створимо цей рядок.
"Привіт, світе".
Отже, ми просто клацаємо правою кнопкою миші і виконуємо двійкове редагування, а потім вводимо "hello world" у текстовому полі ASCII.
І все, тепер ми можемо скопіювати цей рядок.
Тож перед цим, щоб реалізувати це, нам потрібно перевести його на збірку.
Отже, спочатку ми натискаємо на струну.
"Привіт, світе"
до стеку.
А потім викликаємо функцію довжини рядка.
Отже, сам рядок, адреса тут.
403040.
Клацаємо правою кнопкою миші, копіюємо його, спускаємося вниз і переміщуємо його до стеку.
Гаразд.
Далі нам потрібно викликати функцію довжини рядка.
Тож ми переходимо до столів для стрибків.
Просто натисніть на будь-яку доступну функцію, щоб перейти до таблиць переходів.
Шукаємо функцію довжини рядка, яка знаходиться тут, і копіюємо її адресу. Клацніть правою кнопкою миші, скопіюйте адресу, поверніться
до покажчика інструкцій і додайте наш дзвінок сюди.
Викличте і вставте адресу функції довжини рядка.
Отже, тепер ми можемо поставити тут точку зупинки і запустити програму.
Він потрапляє в наш брейк-пойнт, і ми переступаємо.
Тепер вона натисне на струну.
"Hello world" до стеку.
Давай переступимо через це.
"Hello
World" тепер у стеку.
Тепер він викличе функцію довжини рядка.
String length буде використовувати цей параметр і підраховувати кількість символів.
Отже, ми повинні отримати 11.
Рахуємо: один, два, три, чотири, п'ять, шість, сім, вісім, дев'ять, десять, 11.
Пробіл рахується як символ, тому всього 11 символів.
Отже, коли ми переступимо через нього, він поверне значення 11 в -.
Отже, давайте зробимо крок і подивимось -, і він отримає гекс-значення.
B. Шестнадцяткове значення B дорівнює 11.
Тож давайте підтвердимо це і перейдемо до калькулятора.
І в шестикутному полі вводимо B, і бачимо, що це 11 в десятковій системі числення.
Отже, він підрахував кількість символів і повернув результат у регістр -.
Це основний принцип програмування на асемблері, а також програмування на C.
Отже, щоразу, коли функція виконується і повертає щось, це значення буде збережено в регістрі -.
Тому завжди пам'ятайте, що будь-яка функція, яка повертає щось, відновить це значення у регістрі -.
А як дізнатися, що функція щось повертає?
Ви дивитеся на прототип функції.
Отже, це прототип функції.
Прототип - це сигнатура функції.
Сигнатура функції показує, скільки параметрів їй потрібно, а також тип і результат, який вона повертає.
Якщо він нічого не повертає, то попереду ви побачите слово void.
Порожнеча.
Тепер ми можемо це врятувати.
Отже, ми можемо натиснути на файл, патч, файл патча і дати назву.
Скажімо, 25.
Функція.
Довжина рядка.
Довжина рядка функції.
Крапка ікс.
Побачимо.
На цьому відео все.
У наступному відео ми виконаємо проектну вправу на використання довжини рядка.
Побачимося.