Частина 9 - Реєстр посилання
Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial
Реєстр посилання, R14, використовується для зберігання адреси повернення функції call.
При виконанні інструкції BL (галочка з посиланням) підпрограма call встановлює реєстр посилання на адресу повернення підпрограми. BL стрибає на іншу ділянку коду, а коли закінчується, дозволяє повернутися на місце після ділянки BL коду. Коли підпрограма повертається, реєстр посилання повертає адресу назад в програмний контролер.
Реєстр посилання не вимагає записів і читань пам'яті, що містить стек, що може зберегти значну частку часу виконання при повторних викликах малих підпрограм.
При виконанні BL адрес повернення, яка є адресою наступної інструкції, яка повинна бути виконана, завантажується в LR або R14. Коли підпрограма закінчується, LR копіюється прямо в PC (Програмний контролер) або R15, і виконання коду продовжується на місці, де воно було раніше в послідовному джерелі коду.
Кодові часи! Не розчаруйтеся, якщо ви не зрозумієте всього в прикладі коду тут. Воно стане ясним протягом наступних кількох уроків.
Для компіляції:
as -o lr_demo.o lr_demo.s ld -o lr_demo lr_demo.o
Простий приклад, який я створив тут, досить самодостатній. Ми починаємо і продовжуємо до підпрограми no_return, потім до підпрограми my_function, потім до підпрограми wrap_up і, нарешті, до виходу.
Нам необхідно стрибнути в GDB, який є нашим дебагером, щоб побачити точно, що відбувається на кожному етапі:
Як бачите, на кожному етапі в дебагері воно показує вам саме такий прогрес від no_return до my_function, пропускаючи wrap_up__, поки програмний контролер не отримує адресу з реєстру посилання.
У цьому місці ми бачимо прогрес від wrap_up до виходу.
Це фундаментальна операція, коли ми побачимо наступного тижня, як працює стек, оскільки LR є важливою частиною цього процесу.
Наступного тижня ми вийдем до вказівника стека! Залишайтесь на підтримці!
У наступному тижні ми вивчимо вказівник стека! Залишайтесь на підтримці!