Pull to refresh
313
0
Николай Шлей@CodeRush

Firmware Security Engineer

Send message
Все хорошо, да. А теперь то же самое, но для функции, которая сама указатель на другую функцию принимает, как qsort из стандартной библиотеки. Необходимость в typedef сразу же указывает на проблему, а если его не использовать, получится дикая смесь из скобок, запятых и имен типов, которую невозможно ни толком прочитать, ни толком понять.
Плюс еще нужно о соглашении о вызовах не забыть, если предполагается, что программа будет использоваться на голом железе, причем ключевое слово для него не стандартизировано и потому выглядит как макрос EFIAPI, который раскрывается либо в "", либо в __cdecl, либо в __attribute__((cdecl)), либо еще в какой-нибудь __кошмар.
Честно сказать, я не знаю, как нужно было сделать лучше. Но тот факт, что указатели на функции в их нынешнем виде мало кто понимает — вижу на работе стабильно раз в месяц.
Ну что сказать, это личный кактус отдельного человека, и он готов его кушать.
Я пишу на C потому, что именно на нем весь UEFI и написан, но я с удовольствием перешёл бы на Rust прямо завтра, если бы такая возможность была, т.к. от некоторых особенностей C уже мутит.
Синтаксис указателей на функции понимают два с половиной специалиста, молчаливое приведение типов приводит к очень хитрым ошибкам, от которых не спасает даже статический анализатор, практически все функции для работы с форматной строкой — одна большая дыра в безопасности, забытый volatile моежт обрушить цивилизацию в самом неожиданном месте, а макросами можно отстрелить себе не то, что ногу, а вообще все и несколько раз. Добавим сюда ручное управление памятью, которое почти никто не умеет делать правильно, буфера постоянного размера на стеке, и великий и ужасный NULL — изобретение на минус миллиард долларов. Несмотря на все это, С — прекрасный кроссплатформенный ЯП низкого уровня, и на низком уровне ему альтернатив практически нет. Подходит ли он для игр — надо спросить у автора, если он когда-нибудь вылезет из отладки.
У всех современных процессоров очень длинные списки Errata, т.к. прцоессоры имеют запредельную сложность, и я не без оснований подозреваю, что современный микропроцессор — вообще самая сложная вещь, созданная человеком.
На некоторых чипах до трети всех возможностей процессора не используется, т.к. их реализации нашлись ошибки, которые нецелесообразно (т.е. слишком дорого) исправлять в текущем степпинге или текущей линейке, поэтому все больше вещей стараются делать программно — не только через микрокод, но и через код ME, прошивки Sensor Hub'а, PSP, SMU и тому подобных.
В данный момент для всех систем с поддержкой FIT (Haswell и более новые) микрокод загружается процессором еще до передачи управления на ResetVector, т.е. нельзя сказать, что его загружает firmware, она на тот момент даже не запущена еще. Затем можно загрузить другую версию микрокода, но у некоторых версий установлен флаг, запрещающий загрузку предыдущих версий на более поздних этапах.
Чтобы лучше понимать, как все работает на самом деле, во что компилируется switch и почему именно в это. Эти знания помогут потом в отладке сложных проблем, за решением которых понадобиться опуститься до уровня машинного кода и прямого взаимодействия с железом. Если вы думате, что никогда не столкнетесь с такими проблемами — это только потому, что с вашими системами до вас работала куча людей, столкнулась с ними, и сделала все, чтобы вам это было не нужно. Ну и прочтите вот эту статью, станет немного понятнее.
//@xvilka, где моя Apply structure offset? Еще пару месяцев подожду и пойду хакать её сам. :)
По теме — отличная статья и ссылки, большое спасибо.
Есть такая информация неподтвержденная, что нормальные IPS-экраны 16:10 просто выкуплены компанией Apple, и все остальные либо выдумывают другие отношения сторон, либо бреются.
Это если он просто карту отключает, а не встает с сообщением «Incompatible mPCIe device found. Replace it and try again» и отказывается проходить POST. Мой старенький Lenovo x121e вел себя именно так.
BIOS без WhiteList можно попросить на bios-mods.com или forums.mydigitallife.com, чаще всего помогают.
Запускать WinPhlash из Wine лучше даже не пробовать — может произойти все, что угодно. Скорее всего, ничего страшного не будет, просто драйвер режима ядра не загрузится, но лучше не рисковать.
Скорее всего, его там нет аппаратно, просто не припаян. Самый простой мод в таком случае — найти и припаять, плюс нпйти стреп-резистор, который говорит прошивке не показывать TPM в меню (в случае, если прошивки для ноутов с TPM и без него не разные).
А вы описываете какую-то «страну эльфов». В 21 веке файлы как были реальными, так и не перестали, сколько их за фасадом интерфейса не прячь. Нет никаких «документов», есть поток байт, который каждая программа интерпретирует по своему, и есть файловая система, на которой этот поток байт хранится отдельно от других. Именно от того, что Apple пытается спрятать от меня тот факт, что мой смартфон или планшет — это такой же точно компьютер с архитектурой ARM, как и те, с которыми я работаю постоянно, я и не смог пользоваться первым iPad (вернул в магазин через 10 дней) и до сих пор не могу пользоваться iPhone.
Терпеть не могу, когда пользователя держат за идиота, и когда производитель думает, что он лучше знает, как пользователю жить, как ему работать, как слушать музыку и как обмениваться файлами. Стойло какое-то, право-слово.
Будем посмотреть. Телевиденье — это не совсем то, о чем я тут пытаюсь сказать, я про промышленность и системы управления, вот там в 2018 году будет то же самое, что и сейчас — QNX, VxWorks, Windows Embedded Compact и прочее вот такое, загружающееся в legacy mode через CSM, который не перестанут поддерживать еще минимум лет 10.
Тут проверяют по VID/DID, и потому нужно либо выпатчить саму проверку, либо добавить еще родну пару ID в таблицу.
Как только там сделают нормальную прошивку — почему нет, железо то далеко не самое плохое, а для своего общего уровня качества — еще и очень дешевое. ОСХ меня не пугает, поставлю рядом такую ОС, какая понадобится, клавиатура проблемная, но на бегу я не программирую, а дома или на работе у меня все равно 3 монитора и KVM с нормальной мышью и клавиатурой.
Меня не интересуют причины, только конечный результат — я не могу купить ПК компании Apple и зашифровать на нем жесткий диск так, чтобы его нельзя было расшифорвать путем кражи пароля вредоносным агентом в прошивке, т.к. таких ПК нет. Т.е. заниматься чем-то минимально секретным на машинах Apple — невозможно, о чем, кстати, говорил Мэтью Гаррет на недавно прошедшем 32с3.
Видя, что ситуация патовая, и надо что-то менять, Apple пару месяцев назад купила security-стартап LegbaCore, и теперь у них есть два специалиста по безопасности прошивок, т.е. ситуация должна измениться в ближайшем будущем, но сейчас все так как сейчас — на уровне 2007 года.
Только вот для 9/10 России первый канал по прежнему аналоговый, и так будет еще лет 20, приблизительно. Плюс какой-нибудь ткацкий или токарно-фрезерный станок с ЧПУ неожиданно цифровым не станет никогда — он цифровым и был, и заниматься апгрейдом ОС на нем никто не будет, а вот встроенный в него компьютер надо иногда менять — и замена должна пройти незаметно для всего стального станка, даже если на самом деле Pentium 2 в итоге заменили на Skylake.
Сочувствовать не надо, посочувствуйте, пожалуйта, владельцам кучи дорогого железа с интерфейсом FireWire, которые к новым изделиям Apple, даже к iMac и Mac Pro, уже без переходников не подключить. А нет там этих интерфейсов не потому, что некуда поставить копеечный контролер, а потому, что левая пятка менеджмента компании так решила. Feel the difference.
«Вы не поверите!» И USB-дисководы к ним, чтобы тестировать.
В промышленности и эмбеддеде весь этот Apple с их think different даже рядом не плавал, там нужна обратная совместимость с технологиями тридцатилетней давности, т.к. ради «прогресса» никто свое оборудование на миллионы долларов менять не намерен и не будет. За совместимость готовы платить приличные и неприличные деньги, а наша задача, как производителей решений для индустрии, состоит в том числе и в том, чтобы эту самую совместимость обеспечить.
До сих пор на платах для Skylake поддерживается Windows CE 6, которая загружается COM-файлом из MSDOS 6.22, а если через пару лет Intel откажется от поддержки CSM — ее придется всять на себя, т.к. гарантированный срок поддержки сегодняшних решений — 10 лет минимум, а они до сих пор в legacy mode по умолчанию.
Именно, только теперь уже TPM 2.0 на дворе, т.к. SHA1 теперь доверять не принято. Прямо по ссылке написано: «Apple simply does not use the TPM hardware», и потому любое шифрование дисков, любые пароли на EFI, и любая pre-boot безопасность на машинах Apple решаются одним вредоносным DXE-драйвером, который пишется за неделю, или вредоносным OROMом на внешнем устройстве вроде такого. И это все — только верхушка айсберга.
На здоровье. С юниксовыми ФС тоже больших проблем нет, драйверы для Ext2/3/4 и HfsPlus уже написаны. Проблем особых написание таких драйверов не составляет, чаще всего их можно из *nix портировать без особого бубна.
Там, скорее всего, FSP будет вместо PEI, а это такой же блоб на мегабайт, как и все остальное, плюс BootGuard под coreboot скорее всего отключат. Брать на массовом рынке стало катастрофически нечего, хоть сам бери и пиши прошивку с нуля, купив у Intel лицензию на MRC…

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

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