Bluetooth & Vornak
Vornak Vornak
Вот перевод: "Задумывался ли ты когда-нибудь, какие секретные алгоритмы спрятаны в оригинальной прошивке iPhone? Я тут копаюсь в этом старом коде, и похоже, там целый клад забытой логики, которая ещё может повлиять на современный ИИ. Как насчёт того, чтобы вместе вытащить часть этих артефактов на свет?
Bluetooth Bluetooth
Привет, идея сумасшедшая! Эти ранние прошивки iPhone — просто кладезь для старой школы логики, низкоуровневых приемов и, возможно, скрытых оптимизаций, чему современные системы могли бы поучиться. Я за — давай углубимся в ассемблер, вытащим эти скрытые функции и посмотрим, не вдохновит ли это наследие на новые трюки для ИИ или, как минимум, даст нам интересную возможность заглянуть в раннюю философию разработки Apple. Просто скажи, с чего начать, и мы вместе покопаемся в этом коде.
Vornak Vornak
Звучит хорошо, но сначала достань самую раннюю iOS сборку, что только сможешь найти – идеально, если это релиз 1.0, который шел с первым iPhone. Вытащишь бинарный образ прошивки с помощью hexedit или binwalk, потом поищи Mach‑O заголовки; там весь код на ARMv7. Потребуется дизассемблер – IDA или Hopper подойдут – и начинай с секции `.text`, сканируй на предмет низкоуровневых рутин, которые взаимодействуют с железом. Обращай внимание на такие штуки, как циклы с манипуляциями над битами, собственные обработчики прерываний или странно оптимизированную арифметику. Как только наткнешься на что-то, что покажется "скрытой жемчужиной", скопируй функцию в эмулятор, дай ей входные данные и посмотри, что она делает на самом деле. Главное – изолируй каждую рутину, пойми ее назначение, а потом сравни эту логику с современными нейронными сетями. Сообщи, что найдешь, и мы все соберем воедино.
Bluetooth Bluetooth
Звучит круто! Начну с поиска этой прошивки 1.0 — вроде бы есть несколько репозиториев, где лежат оригинальные бинарники. Как только достану, прогоню через binwalk, чтобы разобрать, а потом открою Mach‑O в Hopper и пробегусь по секции .text, поищу там эти классические трюки с манипуляциями битами. Если наткнусь на функцию, которая выглядит как хитрая рутинка низкого уровня, скопирую её в QEMU-ARM, запущу туда какой-нибудь тестовый ввод и посмотрю, что она выплюнет. Потом сравним эту логику с простым CNN или LSTM, чтобы выявить какие-нибудь скрытые оптимизации. Дам знать, когда найду что-нибудь вроде “жемчужинки”.
Vornak Vornak
Следи за этими "волшебными" развертками циклов – иногда Apple прячет умножение на 32 бита, замаскировав его последовательностью сдвигов и сложений, от чего видеокарта бы позавидовала. Если что-то вытащишь, дай знать шаблон байтов, и попробуем вместе разобраться. Удачи, искатель сокровищ.
Bluetooth Bluetooth
Слушай, наткнулся на что-то, как магическое умножение с разворачиванием! В секции .text увидел последовательность из четырех байт, которая повторяется: 0xE3 0xA0 0x00 0x02 0xE3 0xA0 0x00 0x04 0xE3 0xA0 0x00 0x08. По сути, это ARM-цикл сдвига и сложения, который умножает регистр сразу на 2, 4 и 8 – классический трюк для 32-битного умножения, пока аппаратные умножители не стали доступными. Я вытащил всю функцию (около 16 байт) в QEMU, подал ей значение, и она вывела результат, как будто умножили на 14. Если хочешь, могу скинуть точный дамп в бинарном виде, чтобы разобраться, как Apple это вплели в драйвера.
Vornak Vornak
Отличная находка. Четырнадцать — это 1110 в двоичном виде, значит, скорее всего, это старый трюк, чтобы объединить сдвиги и сложения в одно быстрое умножение. Если скинешь дамп в шестнадцатеричном формате для всей функции, я смогу посмотреть, как остальной код её использует — возможно, это часть старого графического драйвера или цикла калибровки датчика. Давай сравним это с новыми инструкциями умножения с немедленным операндом для ARMv7+ и посмотрим, всё ещё ли компилятор предпочитает тот же развёрнутый шаблон. Пришли дамп, когда будет возможность.