stringtranslate.com

Батут (компьютерный)

В компьютерном программировании слово « батут» имеет ряд значений и обычно ассоциируется с инструкциями по прыжкам (т. е. переходом к различным ветвям кода).

Низкоуровневое программирование

Трамплины (иногда называемые косвенными векторами перехода) — это ячейки памяти, содержащие адреса, указывающие на процедуры обслуживания прерываний , процедуры ввода-вывода и т. д. Выполнение прыгает на трамплин, а затем немедленно выпрыгивает или отскакивает, отсюда и термин «батут» . Они имеют множество применений:

Высокоуровневое программирование

Неисполняемые стеки

Некоторые реализации трамплинов приводят к потере стеков без выполнения (стек NX). В частности, в GNU Compiler Collection (GCC) вложенная функция создает трамплин в стеке во время выполнения, а затем вызывает вложенную функцию через данные в стеке. Для трамплина требуется, чтобы стек был исполняемым.

Неисполняемые стеки и вложенные функции являются взаимоисключающими в GCC. Если вложенная функция используется при разработке программы, то стек NX молча теряется. GCC предлагает предупреждение, -Wtrampolinesчтобы предупредить об этом состоянии.

Программное обеспечение, разработанное с использованием безопасного жизненного цикла разработки, часто не позволяет использовать вложенные функции из-за потери стеков NX. [11]

Смотрите также

Ссылки

  1. Бейкер, Генри Г. (сентябрь 1995 г.). «CONS Should Not CONS Its Arguments, Part II: Cheney on the MTA» ACM SIGPLAN Notices . 30 (9): 17–20. doi :10.1145/214448.214454. S2CID  20720831. Архивировано из оригинала 11.11.2016.
  2. ^ ab Muller, Hans (2005-01-31). "Утверждение контроля над графическим интерфейсом: команды, значения по умолчанию и пакеты ресурсов". today.java.net . Батуты . Получено 2015-11-06 .[1]
  3. ^ "Батуты". Mono Project. 8 октября 2022 г.
  4. ^ Stangvik, Einar Otto (2006-08-16). "Thunking in Win32 with C++". Архивировано из оригинала 2012-10-15.
  5. ^ Weiher, Marcel (2004). "Higher Order Messaging (HOM)" (PDF) . Архивировано (PDF) из оригинала 2018-05-27 . Получено 2018-05-26 .
  6. ^ fuz (2011-11-18). "Реализация вложенных функций". StackOverflow . Архивировано из оригинала 2016-03-29 . Получено 2018-05-26 .
  7. ^ "Trampolines for Nested Functions". Использование коллекции компиляторов GNU (GCC) . 2018 [2002]. 18.11. Архивировано из оригинала 2018-05-27 . Получено 2018-05-26 .
  8. ^ "Вложенные функции". Использование коллекции компиляторов GNU (GCC) . 2018 [2002]. 6.4. Архивировано из оригинала 2018-05-27 . Получено 2018-05-26 .
  9. ^ Брейел, Томас М. (2013). "Лексические замыкания для C++" (PDF) . Архивировано (PDF) из оригинала 2017-12-12 . Получено 2018-05-26 .
  10. ^ Уолтон, Джеффри; Манико, Джим; Уолл, Кевин (2018-03-02) [2013]. "Усиление безопасности цепочки инструментов на основе C". Открытый проект безопасности веб-приложений (OWASP). Архивировано из оригинала 2018-05-27 . Получено 2018-03-02 .