Проект по получению оболочки Linux, работающей на iOS, используя эмуляцию USERMODE X86 и перевод SYSCALL.
Для текущего статуса проекта проверьте вкладку «Проблемы» и журналы коммит.
Этот проект имеет подмодуль GIT, обязательно клонируйте с помощью --recurse-submodules или запустите git submodule update --init после клонирования.
Вам понадобятся эти вещи, чтобы создать проект:
pip3 install meson )brew install llvm , на Linux, sudo apt install clang lld или sudo pacman -S clang lld или что -то еще)sudo apt install libsqlite3-dev )brew install libarchive , sudo port install libarchive , sudo apt install libarchive-dev ) Todo: свяжите эту зависимость Откройте проект в xcode, откройте ish.xcconfig и измените ROOT_BUNDLE_IDENTIFIER на что -то уникальное. Вам также необходимо обновить идентификатор команды разработчиков в проекте (не целевой!) Настройки сборки. Затем нажмите запустить. Есть сценарии, которые должны делать все остальное автоматически. Если вы столкнетесь с любыми проблемами, откройте проблему, и я постараюсь помочь.
Чтобы настроить вашу среду, CD для проекта и запустите meson build , чтобы создать каталог сборки в build . Затем CD в каталог сборки и запустите ninja .
Чтобы настроить автономную файловую систему Alpine Linux, загрузите Alpine Minirootfs Tarball для i386 с веб-сайта Alpine и запустите ./tools/fakefsify , с Minirootfs Tarball в качестве первого аргумента и названия выходного каталога в качестве второго аргумента. Затем вы можете запустить вещи внутри альпийской файловой системы с ./ish -f alpine /bin/sh , предполагая, что выходной каталог называется alpine . Если tools/fakefsify не существуют для вас в вашем каталоге сборки, это может быть связано с тем, что он не сможет найти в вашей системе Libarchive (см. Выше способы его установки.)
Вы можете заменить ish tools/ptraceomatic для запуска программы в реальном процессе и на одном шаге и сравнить регистры на каждом шаге. Я использую его для отладки. Требуется 64-битный Linux 4.11 или более поздней версии.
ISH имеет несколько каналов журнала, которые можно включить во время сборки. По умолчанию все они отключены. Чтобы включить их:
ISH_LOG в iSH.XCCONFIG в разделение пространства, разделенное в списке каналов журнала.meson configure -Dlog="<space-separated list of log channels>" .Доступные каналы:
strace : самый полезный канал, регистрирует параметры и возвращаемое значение почти каждого системного вызова.instr : регистрирует каждую инструкцию, выполненную эмулятором. Это сильно замедляет ситуацию.verbose : Журналы отладки, которые не вписываются в другую категорию.DEFAULT_CHANNEL , чтобы увидеть, было ли добавлено больше каналов журнала с момента обновления этого списка.Возможно, самая интересная вещь, которую я написал как часть ISH, - это переводчик. Это не совсем JIT, поскольку он не нацелен на машинный код. Вместо этого он генерирует массив указателей на функции, называемые гаджетами, и каждый гаджет заканчивается хвостовым вызовом к следующей функции; Как метод резьбового кода, используемый некоторыми переводчиками. Результатом является ускорение примерно в 3-5x по сравнению с эмуляцией, используя более простой отправку переключателя.
К сожалению, я принял решение написать почти все гаджеты на языке собрания. Вероятно, это было хорошее решение в отношении производительности (хотя я никогда не узнаю наверняка), но ужасное решение в отношении читаемости, обслуживаемости и моего здравомыслия. Количество ерунды, которое мне пришлось мириться с компилятором/ассемблером/линкером, безумно. Как будто там есть демон, который гарантирует, что мой код достаточно деформирован, и, если нет, составляет глупые причины, почему он не должен компилировать. Чтобы оставаться в здравом уме во время написания этого кода, мне пришлось игнорировать лучшие практики в структуре кода и именовании. Вы найдете макросы и переменные с такими описательными именами, как ss и s и a Макросы ассемблера вкладываются за пределы убеждений. И в довершение всего нет комментариев.
Таким образом, предупреждение: долгосрочное воздействие этого кода может привести к потере здравомыслия, кошмарам о газовых макросах и ошибках линкера или любом количестве других изнурительных побочных эффектов. Этот кодекс известен в штате Калифорния, чтобы вызвать рак, врожденные дефекты и репродуктивный вред.