Обновить
313
0
Николай Шлей@CodeRush

Firmware Security Engineer

Отправить сообщение
Более того, там при рефакторинге закралась копипаста вот здесь, и код переписаный просто не работает:
let myArray = [null, { }, 15];  
let myMap = new Map([ ['functionKey', function() {}] ]);  
let myObject = { 'stringKey': 'Hello world' };  
getCollectionWeight(myArray);  // => 7 (1 + 4 + 2)  
getCollectionWeight(myMap);    // => 4  
getCollectionWeight(myObject); // => 2  
Это потому, что отладочный вывод в декодируемые на LPC IO-порты 0x2F8-0x2FF доступен очень рано и делается буквально парой ассемблерных команд, и это очень помогает в отладке прошивки. Более того, если производитель материнской платы устанавливает на нее EC или SuperIO, пара UART-портов ему достается бесплатно, а если даже не устанвливает — несколько HSUART-портов есть в любом чипсете и SoC специально для отладочных целей.
В данном случае символ это означает собаку и используется для того, чтобы упомянуть известное графическое макро с собакой, раздающей плохие советы.
SMM — настоящее кольцо, у него свои IDT/GDT, свои права на доступ к памяти и устройствам, своя виртуализация и свой набор MSR-регистров, некоторые из которых доступны только из SMM.
ME — не кольцо, а микроконтроллер со своей архитектурой и прошивкой, имеющий доступ к памяти x86 через DMA.
Отличная статья, спасибо.

Поправлю немного по примечаниям:
4. Выбрать загрузочное устройство в  Windows 8 и Windows 10 очень просто, даже не имея пароля. На стартовом экране есть кнопка Power, которая открывает меню с Power off/Standby/Restart. Если нажать на Restart удерживая Shift, вместо перезагрузки произойдет переход в меню Troubleshooting, откуда можно перейти сначала на Advanced Settings, а затем и на Startup Settigs, где и выбрать следующее загрузочное устройство. Пишу по памяти и не имею сейчас доступа к машине с Windows, но когда я пробовал вышеописанное в последний раз пару месяцев назад — работало.
5. Лучше не создавать больше одного ESP (и не создавать ESP меньше 200 Мб, ограничение не жесткое, но некоторым старым загрузчикам не нравится), а просто сложить все загрузчики на один раздел. Efibootmgr действительно лучше не пользоваться, а вот UEFI Shell намного чаще приходится загружать с внешнего носителя, т.к. встраивать его себе в прошивку — потенциальная проблема безопасности, и потому не очень рекомендуется.

Нужно бежать на работу, потом допишу еще пару замечаний, когда смогу прочитать статью вдумчиво, а не на бегу.
Деваться им в этой ситуации некуда, так что пойдут как миленькие. У меня сейчас нет тестовой системы с Windows, чтобы проверить это утверждение, но я обязательно вернусь к этому вопросу, когда она появится.
Устраняется эта «неустранимая» уязвимость на всех машинах с ключом Microsoft KEK тем же обновлением, который закрывает уязвимость в загрузчике, путем добавления хешей уязвимых загрузчиков в переменную dbx, что запрещает их загрузку. Если же у вас свой собственный ключ в KEK — добавьте эти хеши самостоятельно.
В вашем примере нет модальности в интерфейсе. Кнопка приседания означает только приседание и ничего больше. А вот если у вас есть какая-то кнопка «мета», при нажатии на которую кнопка «приседание» теперь кнопка «сменить оружие на пистолет» — вот тут модальность в интерфейсе и появляется. На клавиатуре у нас такими оказываются CapsLock (на нем у меня смена раскладки), NumLock (всегда включен) и Scroll Lock (почти не пользуюсь). При этом, если раскладок становится больше двух (три, например, немецкая еще), то переключать их циклически, как предлагает ОС по умолчанию — это просто кошмар.
Ваша уверенность в том, что я не пробовал VIM и EMACS и не отказался от них сознательно — ни на чем не основана. Пробовал, остановился на альтернативах. Да, режимы в интерфейсах терпеть не могу и стараюсь избавляться от них там, где это возможно.
Не хотите спорить — дело ваше, вам удобно — на здоровье.
Стараюсь называть вещи своими именами. Модальная ерунда — это модальная ерунда, будь она хоть в любимом редакторе, хоть в интерфейсе микроволновой печи, хоть где-то еще. Любые режимы увеличивают когнитивную нагрузку, точка. Если вы готовы с этим мириться ради экономии времени на перенос руки на мышь или нажатие стрелок — имеете полное право. Более того, переход «ты ругаешь утилиту, ей пользуются люди и им нравится, значит ты ругаешь и этих людей тоже» — это демагогия, которая не имеет под собой логической основы.
Я живу и работаю в Баварии, в нашем офисе около 20 разработчиков железа, специалистов по board bring-up и разработчиков драйверов — ни VIM, ни EMACS я не видел нигде. Посещал офисы Bosch, Siemens, Vector и многих других — примерно та же ситуация. Откройте любой мало-мальски уважаемый редактор — и по умолчанию там никаких режимов нет, и VIM-режим там тоже никто по умолчанию не включает.
Спасибо за переход на личности первым же сообщением, отличный аргумент. Вы, конечно, понимаете и за себя, и за меня.
Все эти редакторы не вымерли, просто они такие же артефакты из прошлого, как sed и awk. Мощно? Не вопрос. Просто? Еще как. Нужно кому-нибудь? Конечно. Сколько людей пользуется сейчас для написания нового кода? Два с половиной.
Если у вас вот это перечисленное требует когнитивной нагрузки и выполняется сознанием — не завидую. В противном случае — не понимаю вашего сарказма. Любые режимы в интерфейсах — несомненое зло, и если их можно искоренить — их нужно искоренить.
Любая модальная ерунда — это повышение когнитивной нагрузки на пустом месте, ибо теперь нужно помнить не только то, какое именно действие выполняется по нажатию каждой клавиши, а еще и в каком режиме мы сейчас находимся, в какой режим мы теперь хотим, и как нам перейти в него. Кратковременной памяти мало и так, и в итоге шутка о том, что VIM, на самом деле, имеет два режима — «бибикать» и «портить всё» — уже не кажется смешной.
Более того, программирование от ввода текста отличается очень сильно, и от интегрированной среды разработки в первую очередь требуется не экономия на перемещении курсора, а интеллектуальный подсказки, итеграция с отладчиком, профилировщиком, анализаторами, системами управления версиями и остальными утилитами, необходимыми разработчику даже больше, чем собственно текстовый редактор. В IDE для разработки UEFI-совместимых прошивок AMI Visual eBIOS, например, есть мастер IRQ routing'а, генератор GUIDов, интерфейс для быстрой настройки PCI/SMBus/IOAPIC-устройств, интерфейс для управления build-токенами и другие вещи, нужные именно для разработки прошивки. Понятно, что все это можно добавить и в VIM или EMACS, только вот почему-то пока никто не собрался…
UEFI 2.1 трехлетней давности, в которой даже SecureBoot'а нет, а о безопасности какой-то слыхом не слыхивали. Вот тебе и производитель решений для индустрии…
Изините, господа, но нет.
Axiomtek — производитель, в первую очередь, CoMов, а SBC — это просто диверсификация.
И это только один чип, а не SoC с десятком встроенных устройств, двумя IOAPIC, IOMMU, контролером DDR4, который инициализирует встроенное ARM-ядро PMU с закрытой и подписанной прошивкой, с мостом PCI2PCI на каждой внешней PCIe-линии, и так далее, и тому подобное…
По поводу оплаты — Ланиту, я слышал, очень нужны сейчас специалисты по прошивкам, UEFI, U-boot'у и вот этому всему.
Дим, у всех продуктов, которые затронуты, EOL либо уже позади, либо завтра наступит. Это не SHNMV, это бизнес и ничего личного. Да и смысл реагировать на любые уязвимости в EDK1+, если там и без них — решето…
Не, Дим, по исходнику все же искать проще, поверь моему опыту. :) Если знать, что искать, на обнаружение совсем уж вопиющих случаев вроде твоего уйдет меньше пары минут, ибо синхронные SMI — все-таки пока еще звери довольно редкие, а во времена EDK1+ — вообще штук 5 на всю прошивку.
После того, как SAGE загнулась, я очень переживаю за судьбу этого во всех отношениях замечательного проекта. Когда-то давно некие люди из AMD обещали нам клятвенно поддержку coreboot в каждом релизе AGESA. Где она теперь…

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность

Специализация

Инженер встраиваемых систем, Системный инженер
Ведущий