WIP -Tool, um die IL2CPP -Erstellung von Unity wieder auf die ursprünglichen verwalteten DLLs zu bringen.
Die folgenden Informationen gelten fast vollständig für die CLI -Anwendung, die in GitHub -Releases verfügbar ist. In Ihren eigenen Projekten finden Sie in Ihren eigenen Projekten eine Dokumentation zur Verwendung des "Core" -Modul
Verwendet LIBCPP2IL für die anfängliche Parsen und Belastung von Metadatenstrukturen. LIBCPP2IL ist aus den Build -Artefakten erhältlich, wenn Sie selbst mit IL2CPP -Metadaten etwas tun möchten, und wird unter der MIT -Lizenz veröffentlicht. Der obige Link führt Sie zur Dokumentation für libcpp2il.
CPP2IL wird derzeit einen großen Umschreiben unterzogen. Dieser Zweig repräsentiert Arbeit in Arbeit und kann sich ändern.
CI -Builds für Entwickler können aus meinem Nuget -Feed erhalten werden.
Die Befehlszeilenschnittstelle wurde vereinfacht und wechselt von vielen Befehlszeilenoptionen zu einem Konzept der Ausgabeformate und der Verarbeitungsebenen. Viele dieser Formate und Ebenen sind jedoch noch nicht implementiert, sodass die Funktionalität im Vergleich zu den zuvor freigegebenen Versionen begrenzt ist.
Viele Optionen, wie --analysis-level , --skip-analysis usw., wurden entfernt. Wenn diese Optionen noch nicht implementiert werden, werden diese Optionen nicht zurückkehren. Die Analyse wird standardmäßig ausgeschaltet und über die Verwendung einer Verarbeitungsschicht aktiviert.
Ebenso wurden Optionen wie --supress-attributes , die zuvor die CPP2ilinjected -Attribute unterdrückten, durch eine Prozessschicht ersetzt -diese wird tatsächlich implementiert und wird als attributeinjector bezeichnet. Sie können diese Ebene mit der Option --use-processor -Option aktivieren und andere Optionen mithilfe von --list-processors auflisten.
Metadaten-Dumps und Methoden-Dumps sind ebenfalls ihr eigenes Ausgabeformat, anstatt dass beide standardmäßig sind und über eine dedizierte Option gesteuert werden. Derzeit bedeutet dies, dass Sie CPP2IL mehrmals ausführen müssen, wenn Sie beide Dumps wünschen. Dies kann sich jedoch in Zukunft ändern, wenn wir Unterstützung für die gleichzeitige Ausgabe an mehrere Formate hinzufügen. Wie die Verarbeitungsebenen können Ausgabeformate über die Option --list-output-formats aufgeführt werden und werden über die Option --output-as ausgewählt.
Unter der Haube wurde die Anwendung fast vollständig umgeschrieben. In erster Linie war dies notwendig, da CPP2IL von der Monocil -Bibliothek abhängig war, die einige Einschränkungen aufwies. Als wir uns mit dem Umschalten befassten, stellten wir fest, wie abhängig wir in der Bibliothek waren. Dies ist nicht mehr der Fall - die Anwendung wird um libcpp2il -Typen und die neuen Analyse -Kontextobjekte geschrieben, und die Mono.Cecil -Bibliothek wird nicht mehr verwendet, nachdem er durch Asmresolver.dotnet ersetzt wurde.
Darüber hinaus befinden wir uns derzeit im Prozess der Neuauflagenanalyse basierend auf einer mittleren Darstellung namens ISIL (Anweisungsset-unabhängige Sprache), die eine viel einfachere Unterstützung neuer Anweisungssätze ermöglicht. Der ISIL wird dann in ein Steuerungsdarsteller umgewandelt, das intelligenter analysiert werden kann als eine rohe Demontage.
Wir arbeiten auch an einem Plugin-System, mit dem Entwickler von Drittanbietern Plugins schreiben können, um Unterstützung für benutzerdefinierte Anweisungssätze, Binärformate und schließlich beladen verschleierte oder verschlüsselte Metadaten oder Binärdateien.
Die einfachste Verwendung dieser Anwendung ist für ein Windows X86- oder X64 Unity -Spiel. In diesem Fall können Sie einfach Cpp2IL-Win.exe --game-path=C:PathToYourGame und cpp2il erkennen, erkennt Ihre Unity-Version, suchen Sie die von ihm benötigten Dateien und lassen Sie die Ausgabe in einen CPP2IL_OUT-Ordner ein, wo immer Sie den Befehl ausführen.
Angenommen, Sie haben eine einzelne APK -Datei (keine APKM oder XAPK) und werden mindestens CPP2IL 2021.4.0 ausgeführt.
| Option | Argument -Beispiel | Beschreibung |
|---|---|---|
| -Game-Pfad | C: path to game | Geben Sie den Pfad zum Spielordner an. Erforderlich. |
| -NAME | Testgame | Geben Sie den Namen der EXE -Datei des Spiels an, falls die automatische Erkennung fehlschlägt (da im Spielverzeichnis andere EXE -Dateien vorhanden sind) |
| --verbose | <kein> | Melden Sie mehr Informationen über das, was wir tun |
| -Listprozessoren | <kein> | Listen Sie die verfügbaren Verarbeitungsebenen auf und beenden Sie dann. |
| -Use-Prozessor | AttributeInjector | Wählen Sie eine zu verwendende Verarbeitungsebene aus, mit der die Rohdaten vor dem Ausgang geändert werden können. Diese Option kann mehrmals angezeigt werden. |
| -Processor-Config | Schlüssel = Wert | Geben Sie den ausgewählten Verarbeitungsebenen Konfigurationsoptionen an. Diese werden vom Plugin dokumentiert, das die Verarbeitungsebene hinzufügt. |
| -List-Output-Formats | <kein> | Listen Sie die verfügbaren Ausgabeformate auf und beenden Sie dann. |
| -Output-as | Dummydll | Geben Sie das Ausgabeformat an, das Sie verwenden möchten. |
| -Output-to | cpp2il_out | Root -Verzeichnis zu Ausgabe zu. Dieser Pfad wird an das ausgewählte Ausgangsformat übergeben, das dann möglicherweise Unterverzeichnisse usw. an diesem Ort erzeugt. |
| -WASM-Framework-Datei | C: path to webgl.framework.js | Nur in Verbindung mit WASM -Binärdateien verwendet. Einige davon haben verschleierte Exporte, können jedoch über eine Framework.js -Datei wiederhergestellt werden, die Sie den Weg zur Verwendung dieses Arguments bereitstellen können. |
Jedes einzelne Commit wird mit GitHub -Aktionen in einem CI -Build erstellt. Die Aktionsdatei finden Sie im Ordner .github, wenn Sie die Builds selbst reproduzieren möchten. Seien Sie sich bewusst, dass dies möglicherweise nicht am stabilsten ist - obwohl es Tests gibt, um die Kompatibilität mit einer Reihe von Spielen zu gewährleisten, aber manchmal brechen die Dinge! Diese werden von dem Commit versioniert, aus dem sie gebaut wurden.
Die Release -Dateien können von der Registerkarte Aktionen heruntergeladen werden, wenn Sie in GitHub angemeldet sind oder die folgenden Links verwenden, die immer auf den neuesten erfolgreichen CI -Build hinweisen. Beachten Sie, dass das .NET -Framework -Build für die Kompatibilität mit Wein/Proton bereitgestellt wird.
Darüber hinaus lasse ich "Meilenstein" -Versionen manuell aufgebaut, wenn ich denke, dass eine große Reihe von Verbesserungen vorgenommen wurden. Diese werden nicht als Vorabveröffentlichungen auf Github markiert und sollten (zumindest theoretisch) stabil und für eine Reihe von Spielen geeignet sein.
Vom ersten Meilensteinbau 2021.0 und weiter gibt CPP2IL nun strenger strukturierte Daten an die Konsole. Dies beinhaltet Protokolllevel (Verb, Info, Warn, Fail) und zugehörige Farben (grau für Verb, Blau für Info, gelb für Warn, rot für Fail).
Ab dem Meilenstein 2021.1, wenn CPP2IL in der Lage ist zu erkennen, dass Sie in Wein/Proton laufen, sind diese ANSI -Farbcodes deaktiviert, da sie nicht von Wein unterstützt werden und schrecklich aussehen.
Verbnachrichten werden nur protokolliert, wenn CPP2IL mit der Option --verbose gestartet wird, und es wäre hilfreich, wenn Sie Probleme mit diesem Flag melden könnten. Für den normalen Betrieb sollten sie nicht benötigt werden, es sei denn, Sie sind neugierig.
Wenn Sie nicht möchten, dass die Ausgabe farbig ist, stellen Sie die Umgebungsvariable NO_COLOR=true fest.
Diese Anwendung wird hauptsächlich mit .NET 9.0 erstellt, aber ein .NET -Framework 4.7.2 Build wird auch für ältere Zwecke veröffentlicht.
Es verwendet die folgenden Bibliotheken, für die ich sehr dankbar bin:
(Alle sind MIT lizenziert, abgesehen von Xunit, dem Apache 2.0+MIT)
WasmDisassembler zu finden.Der Net472 Build verwendet die folgenden zusätzlichen Bibliotheken:
Einige Plugins verwenden auch zusätzliche Bibliotheken:
CPP2IL basiert (zu diesem Zeitpunkt sehr locker) auf IL2CPPDumPer, den ich 2018 gegabelt habe und viel Code entfernt habe, viel umgeschrieben und viel mehr hinzugefügt wurde. Aber im Kern hat es immer noch etwas Dumper, hauptsächlich in libcpp2il.
Es enthält Teile von IL2Cppinspector, die mit Erlaubnis von Djkaty eingenommen wurden, und ich möchte ihr hier für ihre unschätzbare Hilfe meine Dankbarkeit aussprechen.
Ich möchte der Audica Modding Community und Discord für die erste Inspiration für dieses Projekt, viele Unterstützung in den frühen Tagen und diese Anfragen heutzutage danken.
Und schließlich schauen Sie sich einige andere coole Projekte an, die mit diesem verknüpfen. Natürlich habe ich IL2Cppinterop weiter oben erwähnt, aber auch Melonloader, der CPP2IL für die Dummy -DLL -Generation verwendet.