Un proyecto para que se ejecute un shell Linux en iOS, utilizando la emulación Usermode X86 y la traducción de Syscall.
Para el estado actual del proyecto, verifique la pestaña Problemas y los registros de confirmación.
Este proyecto tiene un submódulo GIT, asegúrese de clonar con --recurse-submodules o ejecutar git submodule update --init después de la clonación.
Necesitarás estas cosas para construir el proyecto:
pip3 install meson )brew install llvm , en Linux, sudo apt install clang lld o sudo pacman -S clang lld o lo que sea)sudo apt install libsqlite3-dev )brew install libarchive , sudo port install libarchive , sudo apt install libarchive-dev ) TODO: Punte esta dependencia Abra el proyecto en xcode, abra ISH.XCCONFIG y cambie ROOT_BUNDLE_IDENTIFIER a algo único. También deberá actualizar la ID del equipo de desarrollo en la configuración de construcción del proyecto (¡no objetivo!). Luego haga clic en Ejecutar. Hay scripts que deberían hacer todo lo demás automáticamente. Si te encuentras con algún problema, abre un problema e intentaré ayudar.
Para configurar su entorno, CD al proyecto y ejecute meson build para crear un directorio de compilación en build . Luego CD al directorio de compilación y ejecute ninja .
Para configurar un sistema de archivos Alpine Linux autónomo, descargue el tarball Minirootfs Alpine para I386 desde el sitio web Alpine y ejecute ./tools/fakefsify , con el tarball Minirootfs como el primer argumento y el nombre del directorio de salida como el segundo argumento. Luego puede ejecutar cosas dentro del sistema de archivos Alpine con ./ish -f alpine /bin/sh , suponiendo que el directorio de salida se denomina alpine . Si tools/fakefsify no existen para usted en su directorio de compilación, eso podría deberse a que no podría encontrar libarchive en su sistema (consulte arriba para obtener formas de instalarlo).
Puede reemplazar ish con tools/ptraceomatic para ejecutar el programa en un proceso real y un solo paso y comparar los registros en cada paso. Lo uso para la depuración. Requiere Linux 4.11 de 64 bits o posterior.
ISH tiene varios canales de registro que se pueden habilitar en el momento de la compilación. Por defecto, todos están deshabilitados. Para habilitarlos:
ISH_LOG en ISH.XCCONFIG en una lista separada por el espacio de canales de registro.meson configure -Dlog="<space-separated list of log channels>" .Canales disponibles:
strace : el canal más útil, registra los parámetros y el valor de retorno de casi todas las llamadas del sistema.instr : registra todas las instrucciones ejecutadas por el emulador. Esto ralentiza mucho las cosas.verbose : registros de depuración que no encajan en otra categoría.DEFAULT_CHANNEL para ver si se han agregado más canales de registro desde que se actualizó esta lista.Posiblemente lo más interesante que escribí como parte de ISH es el intérprete. No es un JIT ya que no se dirige al código de la máquina. En su lugar, genera una variedad de punteros a las funciones llamadas gadgets, y cada gadget termina con una cola a la siguiente función; como la técnica de código roscado utilizada por algunos intérpretes. El resultado es una aceleración de aproximadamente 3-5x en comparación con la emulación utilizando un despacho de interruptor más simple.
Desafortunadamente, tomé la decisión de escribir casi todos los dispositivos en el lenguaje de ensamblaje. Probablemente fue una buena decisión con respecto al rendimiento (aunque nunca lo sabré con certeza), pero una decisión horrible con respecto a la legibilidad, la mantenibilidad y mi cordura. La cantidad de mierda que he tenido que soportar del compilador/ensamblador/enlazador es una locura. Es como si hubiera un demonio allí que se asegura de que mi código esté suficientemente deformado y, si no, inventa razones estúpidas por las que no debería compilar. Para mantenerse cuerdo mientras escribo este código, he tenido que ignorar las mejores prácticas en la estructura de código y los nombres. Encontrará macros y variables con nombres descriptivos como ss y s y a Macros de ensamblador anidados más allá de la creencia. Y para colmo, casi no hay comentarios.
Entonces, una advertencia: la exposición a largo plazo a este código puede causar pérdida de cordura, pesadillas sobre macros de gas y errores de enlazador, o cualquier número de otros efectos secundarios debilitantes. El estado de California conoce este código para causar cáncer, defectos de nacimiento y daños reproductivos.