diff --git a/Il2CppInspector.CLI/Program.cs b/Il2CppInspector.CLI/Program.cs index 61246de..c55eab5 100644 --- a/Il2CppInspector.CLI/Program.cs +++ b/Il2CppInspector.CLI/Program.cs @@ -48,6 +48,9 @@ namespace Il2CppInspector.CLI [Option('o', "json-out", Required = false, HelpText = "JSON metadata output file", Default = "metadata.json")] public string JsonOutPath { get; set; } + [Option('d', "dll-out", Required = false, HelpText = ".NET assembly shim DLLs output path", Default = "dll")] + public string DllOutPath { get; set; } + [Option("metadata-out", Required = false, HelpText = "IL2CPP metadata file output (for extracted or decrypted metadata; ignored otherwise)")] public string MetadataFileOut { get; set; } @@ -395,6 +398,10 @@ namespace Il2CppInspector.CLI getOutputPath(options.JsonOutPath, "json", imageIndex)); } + // DLL output + using (new Benchmark("Generate .NET assembly shim DLLs")) + new AssemblyShims(model).Write(getOutputPath(options.DllOutPath, "", imageIndex)); + imageIndex++; } diff --git a/Il2CppInspector.Common/Outputs/AssemblyShims.cs b/Il2CppInspector.Common/Outputs/AssemblyShims.cs index 0ec3df0..8976814 100644 --- a/Il2CppInspector.Common/Outputs/AssemblyShims.cs +++ b/Il2CppInspector.Common/Outputs/AssemblyShims.cs @@ -477,7 +477,7 @@ namespace Il2CppInspector.Outputs } // Generate and save all DLLs - public void Write(string outputPath) { + public void Write(string outputPath, EventHandler statusCallback = null) { // Create folder for DLLs Directory.CreateDirectory(outputPath); @@ -516,13 +516,17 @@ namespace Il2CppInspector.Outputs AddCustomAttribute(modules[asm], modules[asm].Assembly, ca); // Add all types - foreach (var asm in model.Assemblies) + foreach (var asm in model.Assemblies) { + statusCallback?.Invoke(this, "Preparing " + asm.ShortName); foreach (var type in asm.DefinedTypes.Where(t => !t.IsNested)) AddType(modules[asm], type); + } // Write all assemblies to disk - foreach (var asm in modules.Values) + foreach (var asm in modules.Values) { + statusCallback?.Invoke(this, "Generating " + asm.Name); asm.Write(Path.Combine(outputPath, asm.Name)); + } } } } diff --git a/Il2CppInspector.GUI/MainWindow.xaml b/Il2CppInspector.GUI/MainWindow.xaml index 5a89e65..3930acb 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml +++ b/Il2CppInspector.GUI/MainWindow.xaml @@ -71,7 +71,7 @@ Il2CppInspector on GitHub www.djkaty.com - © Katy Coe 2017-2020 + © Katy Coe 2017-2021 @@ -345,6 +345,12 @@ + + .NET assembly shim DLLs + No configuration required for assembly shims + + + Python script for disassemblers diff --git a/Il2CppInspector.GUI/MainWindow.xaml.cs b/Il2CppInspector.GUI/MainWindow.xaml.cs index a961d78..ee4bf2d 100644 --- a/Il2CppInspector.GUI/MainWindow.xaml.cs +++ b/Il2CppInspector.GUI/MainWindow.xaml.cs @@ -563,6 +563,26 @@ namespace Il2CppInspectorGUI new JSONMetadata(model).Write(jsonOutFile); }); break; + + // .NET assembly shim DLLs + case { rdoOutputDll: var r } when r.IsChecked == true: + + var dllSaveFolderDialog = new VistaFolderBrowserDialog { + Description = "Select save location", + UseDescriptionForTitle = true + }; + + if (dllSaveFolderDialog.ShowDialog() == false) + return; + + var dllOutPath = dllSaveFolderDialog.SelectedPath; + + areaBusyIndicator.Visibility = Visibility.Visible; + await Task.Run(() => { + OnStatusUpdate(this, "Generating .NET assembly shim DLLs"); + new AssemblyShims(model.TypeModel).Write(dllOutPath, OnStatusUpdate); + }); + break; } areaBusyIndicator.Visibility = Visibility.Hidden;