Alat WIP untuk membalikkan proses pembuatan IL2CPP Unity kembali ke DLL yang dikelola asli.
Informasi di bawah ini hampir seluruhnya berlaku untuk aplikasi CLI yang tersedia pada rilis GitHub. Untuk dokumentasi tentang penggunaan modul "Core" - yang CLI hanyalah pembungkus - dalam proyek Anda sendiri, lihat readme_core.md
Menggunakan libcpp2il untuk parsing awal dan pemuatan struktur metadata. Libcpp2il dapat diperoleh dari artefak build jika Anda ingin melakukan sesuatu sendiri dengan metadata IL2CPP, dan dirilis di bawah lisensi MIT. Tautan di atas akan membawa Anda ke dokumentasi untuk libcpp2il.
CPP2IL saat ini sedang menjalani penulisan ulang besar. Cabang ini mewakili pekerjaan yang sedang berlangsung, dan dapat berubah.
Build CI untuk pengembang dapat diperoleh dari feed Nuget saya.
Antarmuka baris perintah telah disederhanakan, beralih dari banyak opsi baris perintah ke konsep format output dan lapisan pemrosesan. Namun, banyak format dan lapisan ini belum diimplementasikan, sehingga fungsionalitas terbatas dibandingkan dengan versi yang dirilis sebelumnya.
Banyak pilihan, seperti --analysis-level , --skip-analysis , dll, telah dihapus. Mengabaikan fakta bahwa analisis belum diterapkan, opsi ini tidak akan kembali. Analisis akan dimatikan secara default, dan akan diaktifkan melalui penggunaan lapisan pemrosesan.
Sama halnya, opsi -opsi seperti --supress-attributes , yang sebelumnya menekan atribut CPP2ILINTECED, telah diganti dengan lapisan proses -yang ini sebenarnya diimplementasikan, dan disebut attributeinjector . Anda dapat mengaktifkan lapisan ini menggunakan opsi --use-processor , dan Anda dapat mendaftar opsi lain menggunakan --list-processors .
Metadata Dumps dan Metode Dumps akan menjadi format output mereka sendiri juga, bukan keduanya menjadi default-on, dan dikendalikan melalui opsi khusus. Saat ini ini berarti Anda harus menjalankan CPP2IL beberapa kali jika Anda ingin kedua dump, meskipun ini dapat berubah di masa depan jika kami menambahkan dukungan untuk output ke beberapa format secara bersamaan. Seperti lapisan pemrosesan, format output dapat terdaftar melalui opsi --list-output-formats , dan dipilih melalui opsi --output-as .
Di bawah kap, aplikasi ini hampir sepenuhnya ditulis ulang. Terutama, ini diperlukan karena tingkat CPP2IL tergantung pada pustaka mono.cecil, yang memiliki beberapa keterbatasan. Ketika kami melihat ke dalam switching, kami menyadari betapa bergantung pada kami di perpustakaan. Ini tidak lagi terjadi - aplikasi ditulis di sekitar tipe libcpp2il dan objek konteks analisis baru, dan pustaka mono.cecil tidak lagi digunakan, telah diganti dengan asmresolver.dotnet.
Selain itu, kami saat ini sedang dalam proses analisis ulang berdasarkan representasi perantara yang disebut ISIL (bahasa instruksi-set-independen), yang akan memungkinkan dukungan yang lebih mudah dari set instruksi baru. ISIL kemudian dikonversi menjadi grafik aliran kontrol, yang dapat dianalisis lebih cerdas daripada pembongkaran mentah.
Kami juga sedang mengerjakan sistem plugin yang akan memungkinkan pengembang pihak ketiga untuk menulis plugin untuk menambahkan dukungan untuk set instruksi khusus, format biner, dan akhirnya memuat metadata atau file biner yang dikalahkan atau dienkripsi.
Penggunaan paling sederhana dari aplikasi ini adalah untuk game Windows X86 atau X64 Unity. Dalam hal ini Anda bisa menjalankan Cpp2IL-Win.exe --game-path=C:PathToYourGame dan cpp2il akan mendeteksi versi persatuan Anda, cari file yang dibutuhkan, dan membuang output ke folder cpp2il_out di mana pun Anda menjalankan perintah dari.
Dengan asumsi Anda memiliki file APK tunggal (bukan APKM atau XAPK), dan menjalankan setidaknya CPP2IL 2021.4.0, Anda dapat menggunakan argumen yang sama seperti di atas tetapi lulus di jalur ke APK, dan CPP2IL akan mengekstrak file yang dibutuhkan dari APK.
| Pilihan | Contoh argumen | Keterangan |
|---|---|---|
| --Game-path | C: Path to Game | Tentukan jalur ke folder game. Diperlukan. |
| --Exe-name | Testgame | Tentukan nama file EXE game jika deteksi otomatis gagal (karena ada file EXE lain di direktori game) |
| --Verbose | <none> | Masuk lebih banyak informasi tentang apa yang kami lakukan |
| --list-Processor | <none> | Sebutkan lapisan pemrosesan yang tersedia, lalu keluar. |
| -menggunakan-Processor | AtributeInjector | Pilih lapisan pemrosesan untuk digunakan, yang dapat mengubah data mentah sebelum outputting. Opsi ini dapat muncul beberapa kali. |
| --Processor-Config | kunci = nilai | Berikan opsi konfigurasi ke lapisan pemrosesan yang dipilih. Ini akan didokumentasikan oleh plugin yang menambahkan lapisan pemrosesan. |
| --list-output-format | <none> | Daftar format output yang tersedia, lalu keluar. |
| -output-AS | dummydll | Tentukan format output yang ingin Anda gunakan. |
| -output-to | cpp2il_out | Root direktori ke output ke. Jalur ini akan diteruskan ke format output yang dipilih, yang kemudian dapat membuat subdirektori dll di dalam lokasi ini. |
| --Wasm-Framework-File | C: path ke webgl.framework.js | Hanya digunakan bersama dengan biner WASM. Beberapa di antaranya memiliki ekspor yang mengaburkan tetapi mereka dapat dipulihkan melalui file Framework.js, yang dapat Anda berikan jalur untuk menggunakan argumen ini. |
Setiap komit tunggal dibangun untuk build CI menggunakan tindakan github - file aksi dapat ditemukan di folder .github, jika Anda ingin mereproduksi sendiri build sendiri. Perlu diketahui ini mungkin bukan yang paling stabil - sementara ada tes untuk memastikan kompatibilitas dengan berbagai permainan, kadang -kadang hal -hal rusak! Ini diversi oleh komitmen mereka dibangun.
File rilis dapat diunduh dari tab Tindakan jika Anda masuk ke GitHub, atau Anda dapat menggunakan tautan berikut, yang selalu menunjukkan CI Build terbaru. Perhatikan bahwa .NET Framework Build disediakan untuk kompatibilitas dengan anggur/proton.
Selain itu, saya merilis rilis "Milestone" secara manual setiap kali saya pikir serangkaian perbaikan besar telah dilakukan. Ini tidak ditandai sebagai pra-rilis pada github, dan harus (setidaknya secara teori) stabil dan cocok untuk digunakan pada berbagai permainan.
Dari tonggak pertama Build 2021.0, dan dan seterusnya, CPP2IL sekarang menghasilkan data yang lebih terstruktur dengan konsol. Ini termasuk level log (kata kerja, info, peringatan, gagal) dan warna terkait (abu -abu untuk kata kerja, biru untuk info, kuning untuk memperingatkan, merah untuk gagal).
Pada Milestone 2021.1, jika CPP2IL dapat mendeteksi bahwa Anda berlari dalam anggur/proton, kode warna ANSI ini dinonaktifkan, karena tidak didukung oleh anggur dan terlihat mengerikan.
Pesan kata kerja hanya akan dicatat jika CPP2IL diluncurkan dengan opsi --verbose , dan akan sangat membantu jika Anda dapat melaporkan masalah dengan bendera ini diaktifkan. Untuk operasi normal, mereka seharusnya tidak dibutuhkan, kecuali jika Anda penasaran.
Jika Anda tidak ingin output diwarnai, atur variabel lingkungan NO_COLOR=true .
Aplikasi ini dibangun terutama menggunakan .NET 9.0, tetapi .NET Framework 4.7.2 Build juga diterbitkan untuk tujuan warisan.
Ini menggunakan perpustakaan berikut, yang saya sangat berterima kasih:
(Semua MIT berlisensi selain dari Xunit yang merupakan Apache 2.0+MIT)
WasmDisassembler .Build Net472 menggunakan pustaka tambahan berikut:
Beberapa plugin juga menggunakan pustaka tambahan:
CPP2IL (sangat longgar, pada titik ini) berdasarkan IL2CPPDUMPER, yang saya potong pada tahun 2018 dan menghapus banyak kode, menulis ulang banyak, dan menambahkan lebih banyak. Tapi pada intinya, masih ada beberapa dumper yang tersisa di dalamnya, kebanyakan di libcpp2il.
Ini berisi potongan -potongan dari Il2cppinspector, diambil dengan izin dari Djkaty, dan saya ingin mengucapkan terima kasih kepada dia di sini atas bantuannya yang tak ternilai.
Saya ingin mengucapkan terima kasih kepada komunitas Audica Modding dan perselisihan atas inspirasi awal untuk proyek ini, banyak dukungan di masa -masa awal, dan permintaan fitur hari ini.
Dan akhirnya, lihat beberapa proyek keren lainnya yang terhubung dengan yang ini. Tentu saja, saya menyebutkan IL2CPPInterop lebih lanjut, tetapi juga memeriksa Melonloader, yang menggunakan CPP2IL untuk pembuatan DLM DLL.