Любому программисту, который знаком с UEFI, известно, что встроенного механизма обработки исключений там нет. Речь идет о try/except блоках, которые являются расширением Microsoft C/C++ компиляторов. Бывает очень полезно иметь такой механизм и в полном объеме пользоваться теми плюсами, которые он дает. Поэтому в данной статье речь пойдет именно о решении этой проблемы. Также к статье прилагается полная реализация механизма с его демонстрацией на базе UEFI приложения. Затронуты только 64х битные процессоры фирмы Intel, и в обсуждении подразумеваются только они. Реализация механизма находится в папке exceptions хранилища git по адресу: https://github.com/anatolymik/machineries.git.
Сначала немного поговорим о том, как вообще обрабатываются исключения. Прежде всего, исключение это особая ситуация. Как правило, исключение возникает из-за того, что процессор не может выполнить конкретную инструкцию. Когда такое событие имеет место, процессор вызывает обработчик исключения, точка входа которого находится в IDT таблице. Исключений у процессора множество, поэтому в соответствии с его типом вызывается соответствующий обработчик. |