Sebuah proyek untuk menjalankan shell Linux di iOS, menggunakan emulasi USERMODE x86 dan terjemahan syscall.
Untuk status proyek saat ini, periksa tab masalah, dan log komit.
Proyek ini memiliki submodule git, pastikan untuk mengkloning dengan --recurse-submodules atau menjalankan git submodule update --init setelah kloning.
Anda akan membutuhkan hal -hal ini untuk membangun proyek:
pip3 install meson )brew install llvm , On Linux, sudo apt install clang lld atau sudo pacman -S clang lld atau Apapun)sudo apt install libsqlite3-dev )brew install libarchive , sudo port install libarchive , sudo apt install libarchive-dev ) todo: bundel ketergantungan ini Buka proyek di Xcode, buka ish.xcconfig, dan ubah ROOT_BUNDLE_IDENTIFIER menjadi sesuatu yang unik. Anda juga harus memperbarui ID tim pengembangan di proyek (bukan target!) Bangun pengaturan. Lalu klik Jalankan. Ada skrip yang harus melakukan segalanya secara otomatis. Jika Anda mengalami masalah apa pun, buka masalah dan saya akan mencoba membantu.
Untuk mengatur lingkungan Anda, CD ke proyek dan menjalankan meson build untuk membuat direktori build di build . Kemudian CD ke Direktori Build dan jalankan ninja .
Untuk mengatur sistem file Linux alpine mandiri, unduh Tarball Alpine Minirootfs untuk i386 dari situs web Alpine dan run ./tools/fakefsify , dengan Tarball Minirootfs sebagai argumen pertama dan nama direktori output sebagai argumen kedua. Kemudian Anda dapat menjalankan hal -hal di dalam sistem file alpine dengan ./ish -f alpine /bin/sh , dengan asumsi direktori output disebut alpine . Jika tools/fakefsify tidak ada untuk Anda di direktori build Anda, itu mungkin karena tidak dapat menemukan libarchive di sistem Anda (lihat di atas untuk cara menginstalnya.)
Anda dapat mengganti ish dengan tools/ptraceomatic untuk menjalankan program dalam proses nyata dan satu langkah dan membandingkan register di setiap langkah. Saya menggunakannya untuk debugging. Membutuhkan 64-bit Linux 4.11 atau lebih baru.
ISH memiliki beberapa saluran logging yang dapat diaktifkan pada waktu pembangunan. Secara default, semuanya dinonaktifkan. Untuk memungkinkan mereka:
ISH_LOG di ish.xcconfig ke daftar saluran log yang dipisahkan ruang.meson configure -Dlog="<space-separated list of log channels>" .Saluran yang tersedia:
strace : Saluran yang paling berguna, mencatat parameter dan nilai pengembalian hampir setiap panggilan sistem.instr : Log setiap instruksi yang dieksekusi oleh emulator. Ini memperlambat banyak hal.verbose : Log debug yang tidak cocok dengan kategori lain.DEFAULT_CHANNEL untuk melihat apakah lebih banyak saluran log telah ditambahkan sejak daftar ini diperbarui.Mungkin hal paling menarik yang saya tulis sebagai bagian dari ish adalah penerjemah. Ini bukan jit karena tidak menargetkan kode mesin. Sebaliknya itu menghasilkan array pointer ke fungsi yang disebut gadget, dan setiap gadget berakhir dengan panggilan ekor ke fungsi berikutnya; seperti teknik kode berulir yang digunakan oleh beberapa penerjemah. Hasilnya adalah speedup sekitar 3-5x dibandingkan dengan emulasi menggunakan pengiriman sakelar yang lebih sederhana.
Sayangnya, saya membuat keputusan untuk menulis hampir semua gadget dalam bahasa perakitan. Ini mungkin keputusan yang baik berkaitan dengan kinerja (meskipun saya tidak akan pernah tahu pasti), tetapi keputusan yang mengerikan sehubungan dengan keterbacaan, pemeliharaan, dan kewarasan saya. Jumlah omong kosong yang harus saya tahan dari dari kompiler/assembler/linker gila. Sepertinya ada iblis di sana yang memastikan kode saya cukup cacat, dan jika tidak, merupakan alasan bodoh mengapa itu tidak boleh dikompilasi. Agar tetap waras sambil menulis kode ini, saya harus mengabaikan praktik terbaik dalam struktur dan penamaan kode. Anda akan menemukan makro dan variabel dengan nama deskriptif seperti ss dan s dan a . Assembler makro bersarang di luar kepercayaan. Dan untuk melengkapi itu, hampir tidak ada komentar.
Jadi peringatan: Paparan jangka panjang terhadap kode ini dapat menyebabkan hilangnya kewarasan, mimpi buruk tentang makro gas dan kesalahan penghubung, atau sejumlah efek samping lainnya yang melemahkan. Kode ini diketahui oleh negara bagian California untuk menyebabkan kanker, cacat lahir, dan bahaya reproduksi.