Привіт і ласкаво просимо назад.
Зараз ми розглянемо API, що не належать до Windows.
Тому зараз ми розглянемо інший приклад: зовнішні функції.
Завдання полягає у написанні програми, яка отримує довжину рядка і виводить її на термінал.
І ми будемо використовувати суміш зовнішніх API та API Windows.
Зовнішній API буде використовуватися з середовища виконання Microsoft Visual C++, скорочено msvcrt. dll, і дві функції, які експортуються
цією бібліотекою - strlen і printf.
А для завершення роботи програми буде використано Windows API - ExitProcess.
Перший з них - strlen, і ось посилання на довідник по strlen.
Вона приймає рядковий параметр і повертає довжину рядка як ціле число.
Наприклад, перед початком роботи ми повинні зберегти цей рядок за адресою у сегменті даних,
де зберігаються константи, а рядок, довжину якого ми отримаємо, буде "Hello Dreamer.
І
тоді функція, яка буде обчислювати довжину рядка, називається функцією strlen.
Отже, тут ми виштовхнемо параметр до стеку: strlen.
І після цього ми притискаємо нитку до стопки.
Адреса рядка знаходиться звідси.
А потім ми викличемо функцію strlen.
Отже, функція strlen приходить з цієї адреси,
і я покажу вам на практиці, звідки її можна отримати.
Далі ми викличемо функцію printf.
А функція printf приймає рядок формату.
Ми вже вивчали це раніше, раніше у цьому курсі, і ми збережемо рядок форматування
за цією адресою у пам'яті, де знаходиться сегмент даних.
І ми маємо клавішу Enter, яка розбивається на переведення рядка з поверненням каретки.
А всередині рядка переведення рядка з поверненням каретки позначається як hex 0x0A.
Після цього викликається функція printf.
І передаємо параметри до функції printf.
Тож ми штовхаємо у зворотному порядку.
Перше - це -, яке є довжиною рядка, і це - з'являється з результату
виклику strlen ось тут. Функція strlen повертає результат у -, тому - буде зберігати довжину рядка.
А потім в printf ми просто отримуємо доступ до результату, який знаходиться в -, і - має довжину
рядка.
А потім ми штовхаємо цей у зворотному напрямку, тому що цей буде ззаду.
А далі ми натиснемо сам рядок, який є рядком формату, рядком, що містить специфікатор
формату.
Потім ми викликаємо функцію printf, printf.
Це схоже на те, що ми робили раніше, на початку курсу.
І, нарешті, ми викликаємо ExitProcess, щоб вийти з програми.
Але тут він не показаний, оскільки ми вже робили це раніше.
На цьому урок закінчено.
У наступній статті ми розглянемо це і запустимо його у x64dbg.
Побачимося.
Дякуємо за перегляд.