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

Firmware Security Engineer

Send message
Страховка в штатах все покрывает, пока ты работаешь, а уволить тебя могут в любую секунду без объявления войны, и вот конец месяца — и все, больше страховка ничего не покрывает, добро пожаловать в реальную жизнь. Пока тебе 30 лет, и ты здоров как конь — медицина отличная и там, и там, потому что тебе от нее нужен стоматолог пару раз в год, пару прививок и медосмотр ежегодный.
Про еду — можно, не вопрос, только для этого нужно либо ездить вдумчиво по разным фермерским\азиатским маркетам, либо идти в Whole Foods и отдать там 100 баксов за то, что в Германии стоит 25 евро.
Про жилье — понятно, что это проблемы долины в основном, но и работа с высокой ЗП тоже в основном в долине сосредоточена. Я в Германии зарабатывал 100к евро брутто, так что приехав сюда у меня уровень оплаты труда если и вырос, то не сильно (больше бонусов разных, да и ЗП выше), а уровень жизни даже несколько упал, и стоимость жилья в этом сыграла не последнюю роль.
Везде хорошо, но мне в Германии нравилось все-таки больше, и детей растить я постараюсь именно там.
Немецкие налоги выше, особенно после того, как на рубеже в 50 с чем-то тысяч в год государственная медицинская страховка перестает тебя покрывать, и нужно платить за частную с зарплаты.

У Германии много других плюшек, которых нет в США — бесплатные (100% покрытие страховкой практически всех услуг) медицина и образование, отличная недорогая здоровая еда, отсутствие необходимости лететь через океан в Европу и Россию, развитость общественного транспорта, гораздо меньшая повернутость местного населения на консумеризме, настоящая немецкая история и культура (в противовес американскому лоскутному одеялу), значительно меньший разрыв между богатыми и бедными, и куча других плюсов.

Жил в Баварии почти 7 лет, теперь живу в Купертино почти год, и понимаю, что мне тут нравится только более интересная работа и больше денег в итоге (выше ЗП, ниже налоги). Кому-то еще нравится местный климат (мне после Сибири и Баварии жарко), близость океана (он мне пофиг), большой выбор работы (с этим и в Баварии не было проблем) и общая атмосфера, но все перекрывает стоимость жизни, особенно жилья, и образ этой самой жизни (паши пока не сдохнешь, не забудь отдать кредит за похороны).

Нафиг-нафиг, виза кончится — и домой, одними деньгами сыт не будешь, а от переработки можно натурально сойти с ума (где мои 30+ дней отпуска, эхх...).
Задачу так никто и не поставил, и потому не решил нормально ни на одном уровне из предложенных.
Вычислить сумму целых чисел
Это вообще не постановка, а чушь какая-то. Всех целых чисел? Переданных в каком-то виде целых чисел? Из памяти, из файла? Доступны числа сразу все или читаются последовательно? Какие ограничения на сами числа, как и на каком множестве определена операция «сумма», насколько длинная нужна арифметика? Есть ли требования по ресурсам (скорости, памяти, диску), и еще вагон подобных вопросов.

The hardest single part of building a software system is deciding precisely what to build. No other part of the conceptual work is to difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems. No other part of the work so cripples the resulting system if done wrong. No other part is more difficult go rectify later.
Brooks, «No Silver Bullet»
Нет, CP/M появилась позже и под влиянием предустановленной на семействе PDP-11 ОС, так что это такой художественный прием.

Я имел в виду то факт, что абстрактная модель памяти\регистров\стека\т.п. языка С, который до сих пор правит нижним уровнем, не отражает реальной архитектуры как раз со времен машин, для которых он писался, но мы продолжаем на нем писать, и ждем, что процессор самостоятельно сделает нам зашибись…
Проблема в том, что нора уже давно слишком глубокая, и понимать все целиком уже просто невозможно — в мозг не влезет, изучение деталей одних вещей вымоет из памяти детали других, а потом в очередном обновлении микроархитектуры все переделают. Почти все, что вы перечислили, работает на современных процессорах совсем не так, как это описано в литературе времен 8086: регистры давно уже абстракция над регистровым файлом (т.е. процессор имеет значительно больше регистров, чем показывает, и грамотно переименовывает их так, чтобы лишний раз данные не перемещать); кэшей с тех пор стало 3-4 уровня, плюс кэш микроопераций, плюс кэш декодера, таблица со статистикой предсказанных успешно переходов, прямой доступ в кэш в обход CPU и т.д.; прерываний теперь штук пять разных видов и они используют ту же подсистему MSI-X, что и PCIe-устройства; виртуальную память расширили на MMIO (IOMMU), а из Knights Landing уже выкинули in и out; аппаратный стек получил защиту от техник вроде ROP; список можно продолжать очень долго.

Основная трагедия архитектуры x86 в том, что с развитие процессора шло не вместе с развитием ПО, а так, чтобы ПО можно было вообще не трогать десятилетиями, а оно при этом исполнялось на 5% быстрее с каждым поколением. Процессор при этом с каждым разом усложнялся кратно, и теперь нынешний — скорее всего самая сложная вещь, сделанная человечеством вообще. Софт при этом так никто и не переписал, и он по прежнему думает, что вокруг CP/M на PDP11. При этом Интел также отлично понимает, что еще одну попытку сделать нормальную массивно-параллельную (которой была IA-64, оставившая нам в наследство UEFI) с оптимизациями на уровне компилятора, а не самого процессора, они могут не пережить, поэтому улыбаются и продолжают латать текущие из всех общих ресурсов данные затычками в виде новых инструкций (которые надо расставлять в компиляторе) в каждом следующем обновлении микрокода.

Короче, неконтролируемый рост сложности закономерно довел архитектуру до цугундера, при котором любой произвольный набор из 3-8 букв английского алфавита скорее всего является валидной мнемоникой, для которой нужен мануал на 3.5к страниц, и процентов 40 которой практически не используется, но не может быть выброшена без вреда для обратной совместимости.
Для установки неподдерживаемых ОС потребуется отключение SecureBoot, поддерживаются на данный момент macOS 10.13.6+ и Windows 10.
Привет Хабру от разработчиков SecureBoot'а на этих машинах.
Наконец-то получилось внедрить относительно нормальную (и включенную по умолчанию) защиту загрузчика и ядра ОС от модификаций без очень сильного колдунства в продукт для массового рынка.
Ну не в лотерею, а в карты же.

USB Type C — это не проприетарный разъем Apple, а отраслевой стандарт USB IF, и разъем был выбран таким, чтобы не нарушать патентов Apple на разъем Lightning (который намного лучше переживает физические повреждения, потому что ломается со стороны кабеля, а не со стороны устройства, и потому поломка обходится значительно дешевле).

Про разные виды кабелей — это тоже вопросы к USB IF, а точнее к разделу USB-C Alternate Modes. Сделано это все для того, чтобы сделать разъем совместимым с принципиально разными шинами и группами оборудования (Thunderbolt — это фактически PCIe, а USB 3.1 — это совсем не PCIe, и нельзя сделать так, чтобы они оба работали с одним и тем же кабелем, не удорожая при этом кратно такой кабель).

Короче, Apple хоть и участвовала среди первых в разработке разъема USB Type C и кабелей к нему, но винить их одних в том, что получилось то, что получилось, нет никакого смысла.
Это и есть мисконф, но уязвимостью он быть не перестает, т.к. позволяет повысить привилегии при помощи ряда шагов, которые по отдельности вроде бы вполне безобидные, а вместе — уже совсем нет.
Успешная эксплуатация позволяет получить гораздо большие права, чем права администратора в ОС: она позволяет перехватить контроль над МЕ и получить управление еще до старта основного процессора.
Достаточно сбросить содержимое ME data region (еще точнее, ME FS) и manufacturing mode включится обратно. Есть сведения про то, что МЕ может самостоятельно выключить MM при определенных настройках дескриптора, но т.к. мы не используем рекомендованные Интел настройки (там закрыт доступ к региону МЕ на чтение, а это не позволяет инспектировать его, что недопустимо), то к нашим машинам это неприменимо. BootGuard мы также не используем по разным причинам, на современных системах начиная с iMac Pro вместо него используется собственные технологии защиты прошивки от модификации.
Скажу спасибо h0t_max и здесь тоже, я потратил на исправление этой уязвимости примерно месяц, потому что нужно не только выключить manufacturing mode, но и сделать так, чтобы он не мог случайно или специально включиться обратно.
Изучайте QML в таком случае, там EcmaScript и CSS. «Классы, указатели, ссылки, макросы какие-то» — это потому, что C++ и мета-объектная система, плюс очень долгая история.
Не нарушает ни того, ни другого. Статическая компиляция Qt 5.6.3, у которой лицензия LGPL v2.1, предполагает возможность обновления версии библиотеки, т.е. если пользователь потребует, ему нужно предоставить объектные файлы и инструкцию по сборке с другой версией Qt, чтобы не нарушить лицензию. Т.к. пользователь один и ничего такого он не требует — лицензия не нарушена.
OpenSSL имеет свою собственную лицензию, похожую на Apache 1.0 (с середины 2017 года — саму Apache 2.0), и проблемы со статической линковкой там были только со старыми версиями и только если линковаться с GPL-кодом.
Пользуясь случаем, прошу перенести geektimes.com/post/258278 и geektimes.com/post/258274 обратно на Хабр в «Схемотехнику», потому что DIY там был для галочки, а все остальное потерялось при прошлом перезде.

И посты тов. dlinyj пернесите назад, заодно.
Это победа!
«У меня не было светодиодов, поэтому я сделал простую встроенную видеокарту и показываю их через HDMI»
Вспоминается старая шутка про то, что раньше прослушку боялись как огня, а теперь уточняют у нее текущее время, погоду и рецепт блинчиков.
К сожалению, на данный момент красивого, работоспособного и читаемого кода уже недостаточно, он должен быть еще и безопасным, а с этим все очень плохо и в С, и в С++. Преимущество Rust именно в том, что компилятор не даст выстрелить себе в ногу или голову, а все места, в которых стрелять все таки нужно заставит пометить как unsafe. Ясно, что если писать «на регистрах» и заниматься арифметикой указателей, то весь код будет пестрить этими unsafe и сильно лучше чем в С не будет, но уже на следующем уровне абстракции Rust становится заметно лучше языков с неявным владением, неявным и неконтролируемым временем жизни объектов, побочными эффектами в самых неожиданных местах, молчаливым приведением типов, мутабельностью по умолчанию, сырыми указателями, целочисленным переполнением и прочими особенностями С и его наследников, которые мы знаем и любим.

Я тот самый суровый нордический парень с бородой, пытающийся наладить безопасность прошивок того самого хипстеровского макбука и я вам откровенно заявляю: писать сколько нибудь безопасный код много, быстро и недорого на С невозможно, даже если обвешаться статическими анализаторами, АСАНами, УБСАНами и десятком других утилит, помогающими находить ошибки в на вид совершенно безошибочном коде.
Да, мы используем этот язык 30+ лет, да, по нему достаточно специалистов, да, его придется изучать и с ним придется работать, но я вас заклинаю: если можете, пожалуйста, не пишите на нем ничего, связанного с безопасностью, он для этого подходит примерно как ножи для жонглирования — есть люди, которые умудряются еще и штуку инжира кушать, жонглируя ими, но в основном все заканчивается очень плохо. История с уязвимостями всех без исключения ядер современных ОС, написанных на С-подобных языках — отличное тому подтверждение.
Забыл добавить: массовый resizeColumnToContents — весьма небыстрая операция, и если у вас много элементов в дереве (тысяч тридцать, например), она может занимать пару секунд даже на хорошем железе.
Вешать такие операции на collapse/expand — опять же отличный вариант выбесить пользователя тормозами.

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

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