Как стать автором
Обновить

Комментарии 13

Исправлена ошибка верстки, вызванная некорректной вставкой изображений.
Изначально не планировалось публиковать на Хабре. В последний момент решили выложить скриншоты. Исходный код тоже подверстаем, но чуть позже. Спасибо за понимание :)
fixed
        PUSH64		R7			; Storage for output
        MOVQ		R7,R0			; Address of storage = stack pointer
        PUSHN		R7			; Parameter#2 = Output address
        PUSHN		R6			; Parameter#1 = MSR address


таки разница есть. хм… но всё равно отвратно.
уже жалею что предложил заменить скриншоты ^_^
Ссылка на скриншоты осталась по тексту после Рис 1. и Рис 2.
Непонятно, зачем это нужно. В чём сложность иметь разные бинарники для разных платформ? Ваше приложение всё равно не сможет работать на незнакомой архитектуре, а если список поддерживаемых архитектур предопределён — зачем всё так усложнять?
Один бинарник под все архитектуры — это удобное и изящное решение, позволяющее избежать проблем с конфигурированием, собенно если этот бинарник «прошит» в ПЗУ карты-адаптера. Изначально, EFI Byte Code разрабатывался именно для этого. Возможность писать на EBC загружаемые приложения — просто дополнительный бонус.

Приложение может запуститься на незнакомой архитектуре, если до распознавания архитектуры оно работает в минимальном режиме, взаимодействуя только с системными таблицами и UEFI-объектами.
Понятно, спасибо.
Метод этот применять не стоит вообще, я думаю.
Вместо него стоит выделить платформозависимый код в отдельный DXE-драйвер и вызывать этот самый код через стандартные механизмы взаимодействия. Драйвер не загружен — до свиданья, никакого неопределенного поведения при запуске на ARM.
Если загрузчик, стартующий до вызова драйвера, должен быть кроссплатформенным, то он пишется не в нативном коде, а с использованием EFI Byte Code. DXE-драйверы, поддерживающие конкретные платформы, как правило, используют нативный код. Следовательно, мы вернулись к ситуации, рассмотренной в статье:
  • вызывающая процедура: EBC
  • вызываемая: нативный код
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации