Бэтмен Чёртов-Говнокодер и ARM
25 мая 2025 г., 01:24
—Но а что же было дальше с Бэтменом?
—Ах, мой дорогой! Ну конечно, после моего блистательного кремниевого фейерверка, Бэтси был... скажем так, немного не в себе. Сидел он в своей Бэт-пещере, окруженный останками своего "Bat-Threadripper-Extreme-Edition-For-Justice-Now-Just-A-Pile-Of-Scrap", и горько вздыхал. Альфред рядом участливо подметал транзисторы веничком.
—"Альфред, – промолвил Бэтмен, его голос был тише обычного, как у летучей мыши с ангиной, – я разочарован. Вся эта x86_64... она... она слишком сложная. Слишком много способов устроить... ну, ты видел."
—"Действительно, сэр, – кивнул Альфред, ссыпая очередной килограмм кремниевого мусора в контейнер с надписью 'Эксперименты Сэра: Неудачные'. – Возможно, вам стоит рассмотреть альтернативы?"
—"Альтернативы?" – Бэтмен потёр подбородок. – "Ты имеешь в виду... другую архитектуру?" Его глаза, обычно полные решимости (и недосыпа), на мгновение загорелись нездоровым огоньком энтузиазма. "ARM! Да, Альфред! Говорят, они проще, элегантнее! Reduced Instruction Set Computer! Меньше инструкций – меньше способов всё испортить! И энергоэффективные! Я смогу следить за Джокером 24/7, не разоряя Уэйн Энтерпрайзес на счетах за электричество!"
Альфред промолчал. Он знал этот блеск в глазах. Это был блеск человека, который собирается наступить на те же грабли, но с новым, модным черенком.
И вот, через неделю, в Бэт-пещеру доставили новейший, самый мощный ARM-сервер, который только можно было купить за деньги (и немного влияния Брюса Уэйна). Сверкающий, с пассивным охлаждением (Бэтмен решил, что шумные вентиляторы – это пережиток прошлого), и с операционной системой, специально портированной на него лучшими умами УэйнТек.
—"Вот оно, Альфред! – Бэтмен любовно погладил гладкий корпус. – "Bat-M1-Max-Ultra-Instinct-For-Simplicity-And-Order"! На этот раз всё будет по-другому. Я буду писать чистый, безопасный код. Никаких больше MSR! Только благородный ARM ассемблер, где каждая инструкция – как стих Шекспира!"
Он сел за консоль. Первые десять минут прошли в благоговейном изучении документации: —"Смотри, Альфред! Регистры общего назначения `x0-x30`! Никаких тебе `eax`, `ebx`! И `sp` для стека, `lr` для адреса возврата! Какая элегантность!"
Альфред вежливо кивал, параллельно проверяя, заряжен ли огнетушитель.
—"Так, – Бэтмен начал кодить. – Я напишу небольшой модуль ядра для супер-быстрой криптографии. Мне нужно будет напрямую поработать с регистрами сопроцессора безопасности... `MRS` и `MSR` (да, в ARM они тоже есть, но для системных регистров, не путать с x86 MSR!). Какая ирония!" – он усмехнулся.
Минута 11: Первые сомнения.
"Хм, Альфред, этот `SPSR_EL1` (Saved Program Status Register для EL1, то есть режима ядра) выглядит... интересно. Столько флагов! А что если я попробую выставить флаг `D` (Debug exceptions enabled) и `A` (SError interrupt mask) одновременно, а потом вызову какую-нибудь инструкцию, которая обычно вызывает синхронное исключение, но не SError? Это должно быть... познавательно."
Минута 12: "Небольшая" ошибка в адресации.
Бэтмен решил оптимизировать доступ к памяти. "Зачем эти медленные `LDR/STR` с косвенной адресацией, когда я могу попробовать... а что если я попытаюсь записать данные по физическому адресу, который отображён на память устройства, но сделаю это с атрибутами 'Normal Non-Cacheable', а устройство ожидает 'Device-nGnRnE' (Non-Gathering, Non-Reordering, No Early Write Acknowledgement)? Это ведь просто атрибуты, что может пойти не так?"
Минута 13: Игры с TrustZone.
"Ах, TrustZone! Secure world и Normal world! Какая прелесть! А что, если я, находясь в Normal world (режим ядра), попытаюсь напрямую дёрнуть какой-нибудь SMC (Secure Monitor Call) с параметрами, которые заставят Secure Monitor впасть в ступор? Например, передам ему указатель на данные в Secure memory, но с невыровненным адресом и неверным размером?"
Минута 14: Эксперименты с системным таймером.
Бэтмен обнаружил регистры управления системным таймером. `CNTP_CTL_EL0` (Counter-timer Physical Timer Control register). "Что если я установлю очень маленькое значение в `CNTP_TVAL_EL0` (значение для сравнения), а потом в `CNTP_CTL_EL0` включу таймер и *одновременно* замаскирую прерывание от него? Будет ли он тикать впустую, или это вызовет какую-то гонку состояний в контроллере прерываний GIC (Generic Interrupt Controller)?"
Минута 14, секунда 45:
Бэтмен, скомпилировав свой маленький, "безопасный" модуль, нажал `Enter`.
Сначала ничего не произошло. "Bat-M1-Max-Ultra-Instinct-For-Simplicity-And-Order" тихо гудел (точнее, не гудел, он же с пассивным охлаждением, просто слегка нагрелся).
—"Видишь, Альфред! – торжествующе сказал Бэтмен. – ARM – это стабильность! Это порядок!"
Минута 14, секунда 58:
Из системного блока послышался тихий, едва заметный щелчок. Потом ещё один. Потом едва уловимый запах... не палёной пластмассы, нет. Это был более тонкий, какой-то... экзотический запах. Запах разочарованного кремния, смешанный с нотками ионизированного воздуха и несбывшихся надежд.
Минута 15:
Все мониторы погасли. "Bat-M1-Max-Ultra-Instinct-For-Simplicity-And-Order" перестал даже греться. Он стал холодным и безжизненным, как сердце налогового инспектора. Бэтмен сидел, глядя на чёрный экран. Его лицо не выражало ничего. Абсолютно ничего.
Альфред подошёл, деликатно взял системный блок (он был на удивление лёгким) и посмотрел на Бэтмена.
—"Сэр, – мягко сказал дворецкий. – Позвольте предположить. Возможно, проблема не столько в архитектуре процессора, сколько в неуёмной тяге некоторых индивидов к... экспериментам на грани фола с системными регистрами?"
Бэтмен медленно повернул голову. В его глазах читалась вселенская усталость.
—"Альфред, – прошептал он. – Закажи мне... закажи мне самый простой калькулятор. На солнечных батарейках. И, пожалуйста, спрячь от меня все отвёртки."
Так закончилась короткая, но поучительная история романа Бэтмена с ARM. Оказалось, что сломать можно всё. Особенно если ты Бэтмен. И особенно, если у тебя есть 15 свободных минут и доступ к режиму ядра. Некоторые люди просто созданы для того, чтобы сеять хаос, даже если они искренне стремятся к порядку. А Я? Я, Джокер, услышав эту историю, смеялся так, что в Аркхеме пришлось менять лампочки – старые лопнули от вибрации. "Ох, Бэтси, Бэтси! Ты мой самый лучший источник вдохновения! И разрушения!"