Новости

UEFI, віртуальні машини і налагодження

  1. Створення інструментальної та цільової віртуальних машин в середовищі Oracle VirtualBox
  2. Підготовка диска для UEFI-завантаження
  3. UEFI завантаження, запуск відладчика в середовищі UEFI Shell
  4. Вивчаємо основні функції відладчика FDBG

Сьогодні ми вивчимо процес налагодження додатків в середовищі UEFI x64 за допомогою налагоджувального інструмента FDBG від автора Feryno. Щоб така робота не перетворилася на банальну і монотонну, паралельно будемо вирішувати ще одну задачу - запустивши FDBG на віртуальній машині в середовищі Oracle VirtualBox, проаналізуємо системні об'єкти, що знаходяться в адресному просторі віртуальної машини. Акцент зробимо на низькорівневих апаратних відмінностях між віртуальною і реальною платформами.

Очікуваним фактом є те, що на відміну від Windows-версії розглянутого відладчика, забезпеченою віконним інтерфейсом, UEFI-реалізація використовує консольний інтерфейс і нагадує debug.exe часів MS-DOS.

Мал
Мал. 1. Отладчик FDBG в середовищі Windows 64-bit

Створення інструментальної та цільової віртуальних машин в середовищі Oracle VirtualBox

Повний опис процесу створення і запуску віртуальних машин в середовищі Oracle VirtualBox наводити не будемо, продукт забезпечений досить зручним і інтуїтивним інтерфейсом. Зупинимося на особливостях цього процесу, важливих для нашої задачі.

Перша віртуальна машина буде інструментальної, на неї встановимо довільну ОС, наприклад Windows. Вона буде потрібно для того, щоб стандартними засобами операційної системи виконати підготовку образу завантажувального диска UEFI для другої машини. Необхідність в інструментальній машині пов'язана з тим, що набір інструментів, доступних в середовищі UEFI, поки ще недостатньо широкий.

Друга машина буде цільової платформою для завантаження в режимі UEFI. Операційну систему на неї встановлювати не потрібно. При її створенні слід звернути увагу на наступні опції:

Мал
Мал. 2. Завдання версії операційної системи для цільової машини

Так як чекають експерименти з 64-бітної реалізацією UEFI, потрібно вибрати 64-бітну систему в розділі Загальні.

Мал
Мал. 3. Установка опції UEFI-завантаження для цільової машини

Для виконання UEFI-завантаження, необхідно встановити прапорець Включити EFI в розділі Система.

Отже, у нас є інструментальна машина, на віртуальному жорсткому диску якої встановлена операційна система і цільова машина, віртуальний жорсткий диск якої на даний момент порожній. Для того щоб інструментальну машину можна було використовувати для підготовки завантажувального диска цільової машини, потрібно підключити жорсткий диск цільової машини до інструментальної машині. Зауважимо, що наявність загального диска робить одночасний запуск машин неможливим.

Мал
Мал. 4. Підключення жорсткого диска до інструментальної віртуальній машині

Для підключення жорсткого диска до інструментальної віртуальній машині використовуємо кнопку Додати диск. В результаті, підключено два диска:

  • WinXP32.vdi - це завантажувальний диск інструментальної машини з операційною системою.
  • UEFI.vdi - диск цільової машини.

Підготовка диска для UEFI-завантаження

Завантажуємо операційну систему на інструментальної машині. Так як диск цільової машини спочатку не инициализирован, він не буде доступний на рівні файлової системи. Використовуючи штатні інструменти, необхідно створити розділ з файловою системою FAT32. Нагадаємо, в середовищі UEFI не підтримує файлову систему NTFS.

Мал
Мал. 5. Інструментарій для роботи з дисками в середовищі Windows XP

Згідно зі специфікацією, UEFI-завантаження на увазі запуск з диска додатки (завантажувача) по певному шляху і імені. Для UEFI x64 шлях і ім'я повинні бути такими:

\ EFI \ BOOT \ bootx 64. efi

Створюємо зазначені каталоги і розміщуємо файл UEFI Shell під вказаним ім'ям. Цей файл буде запущений при старті нашої цільової віртуальної машини в режимі UEFI і забезпечить функціональність, яку з деякою натяжкою можна назвати 64-бітної DOS-середовищем.

Отладчик і тестовий приклад доступні на сайті http://fdbg.x86asm.net/ вибираємо UEFI x64 version. Завантажуємо і розпаковуємо архів, файли fdbg.efi і test.efi розміщуємо в кореневому каталозі диска. Було відмічено, що при розміщенні файлу прикладу в каталозі, відмінному від кореневого, відладчик відмовлявся його завантажувати.

UEFI завантаження, запуск відладчика в середовищі UEFI Shell

Користуючись інструментальної машиною, ми підготували диск для завантаження цільової машини. Тепер треба вимкнути інструментальну машину і включити цільову. Так як ці машини використовують загальний віртуальний жорсткий диск, їх одночасна робота неможлива. Запустивши цільову машину, ми повинні побачити приблизно наступне:

Мал
Мал. 6. Запуск UEFI Shell

Практика використання реальних і віртуальних платформ показує, що можливість UEFI завантаження може залежати від типу завантажувального пристрою (IDE або SATA). Тому, якщо завантаження не виконується, рекомендуємо звернутися до вкладки Носії в меню налаштувань VirtualBox.

Вибираємо пристрій fs 0: <enter> вводимо назву програми FDBG <enter>, запускаємо відладчик. У відповідь на запрошення, вводимо ім'я отлаживаемого додатки - test. efi <enter>. Бачимо першу інструкцію додатки.

Мал
Мал. 7. Запуск FDBG, завантаження і запуск прикладу

Вивчаємо основні функції відладчика FDBG

Мал
Мал. 8. h - виведення довідкової інформації

Мал
Мал. 9. c - дизасемблювання інструкцій

Мал
Мал. 10. t - трасування, або покомандного виконання інструкцій

Отладчик не тільки дізассемблірует інструкції процесора, але і коментує звернення до системних об'єктів і таблиць UEFI.

Мал
Мал. 11. r - перегляд вмісту регістрів загального призначення

Ставлячи параметри, можна також переглядати регістри SSE, MMX, x87. наприклад:

r xmm0
r mm0
r st0

В рамках іншого експерименту, ми переконалися, що відладчик FDBG підтримує 256-бітові регістри AVX (YMM0-YMM15). Але зараз не зможемо це побачити, оскільки функціональність віртуальної машини кілька поступається функціональності хост-машини, зокрема, віртуальна машина не підтримує AVX.

Мал
Мал. 12. d - дамп пам'яті

Деяка незручність доставляє висновок дампа без інтервалів між байтами. Задавши d ffffff80, переглядаємо останні 128 байт 4-гігабайтного діапазону. Нагадаємо, що останні 16 байт цього діапазону (адреса fffffff0h) починаються з першої процессорной інструкції, що виконується після скидання. Послідовність 90h, 90h, EBh, ACh, це дві інструкції NOP і внутрішньосегментний відносний перехід (JMP) з 8-бітовим зміщенням.

Чи викликає інтерфейс UEFI ентузіазм у розробників системного програмного забезпечення або залишається «річчю в собі»? Нижче наведемо три аргументи на користь першого варіанту.

  1. Один з основних інструментів для створення віртуальних машин, Oracle VirtualBox, підтримує UEFI. Дослідницька робота, описана в статті, виконувалася в 64-бітному режимі, разом з тим, реалізація IA32 UEFI також доступна в цьому продукті. Причому, в обох режимах (x64 і IA32), UEFI firmware віртуальної машини здатне завантажувати та запускати програми, написані в системі команд EBC (EFI Byte Code).
  2. У сімействі отладчиков FDBG, є UEFI x64 реалізація відладчика. Продукт можна вважати кілька «сирим», але вже придатним для практичного застосування. На сайті розробника також доступний вихідний код програми.
  3. Раніше ми вже знайомили наших читачів з отладчиком Intel EBC Debugger

Чи викликає інтерфейс UEFI ентузіазм у розробників системного програмного забезпечення або залишається «річчю в собі»?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: