CLI/GUI: Add shim DLL output support

This commit is contained in:
Katy Coe
2021-01-10 11:38:45 +01:00
parent a34ff5cc44
commit 7961fc6dab
4 changed files with 41 additions and 4 deletions

View File

@@ -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++;
}

View File

@@ -477,7 +477,7 @@ namespace Il2CppInspector.Outputs
}
// Generate and save all DLLs
public void Write(string outputPath) {
public void Write(string outputPath, EventHandler<string> 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));
}
}
}
}

View File

@@ -71,7 +71,7 @@
<LineBreak/>
<Hyperlink NavigateUri="https://github.com/djkaty/Il2CppInspector" RequestNavigate="Hyperlink_OnRequestNavigate">Il2CppInspector on GitHub</Hyperlink><LineBreak/>
<Hyperlink NavigateUri="http://www.djkaty.com" RequestNavigate="Hyperlink_OnRequestNavigate">www.djkaty.com</Hyperlink><LineBreak/>
&#169; Katy Coe 2017-2020
&#169; Katy Coe 2017-2021
</TextBlock>
<!-- Image details view -->
@@ -345,6 +345,12 @@
<Separator Margin="5,15,5,15"/>
<!-- Assembly shim DLLs -->
<RadioButton GroupName="grpOutputType" Name="rdoOutputDll" VerticalContentAlignment="Center" FontSize="18" Foreground="{StaticResource MicrosoftGreen}">.NET assembly shim DLLs</RadioButton>
<TextBlock TextWrapping="WrapWithOverflow">No configuration required for assembly shims</TextBlock>
<Separator Margin="5,15,5,15"/>
<!-- Python script -->
<RadioButton GroupName="grpOutputType" Name="rdoOutputPy" VerticalContentAlignment="Center" FontSize="18" Foreground="{StaticResource MicrosoftGreen}">Python script for disassemblers</RadioButton>
<DockPanel>

View File

@@ -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;