mirror of
https://github.com/LukeFZ/Il2CppInspectorRedux.git
synced 2025-12-10 13:30:26 +05:00
AppModel: First iteration of ApplicationModel API
Integrate with C++ scaffolding Add new tests Rename Il2CppModel to TypeModel Incomplete IDAPython integration CLI and GUI support Update README.md
This commit is contained in:
@@ -8,6 +8,7 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using Il2CppInspector;
|
||||
using Il2CppInspector.Model;
|
||||
using Il2CppInspector.Reflection;
|
||||
using Inspector = Il2CppInspector.Il2CppInspector;
|
||||
|
||||
@@ -20,7 +21,7 @@ namespace Il2CppInspectorGUI
|
||||
{
|
||||
private Metadata metadata;
|
||||
|
||||
public List<Il2CppModel> Il2CppModels { get; } = new List<Il2CppModel>();
|
||||
public List<AppModel> AppModels { get; } = new List<AppModel>();
|
||||
|
||||
public Exception LastException { get; private set; }
|
||||
|
||||
@@ -82,7 +83,7 @@ namespace Il2CppInspectorGUI
|
||||
}
|
||||
|
||||
// Multi-image binaries may contain more than one Il2Cpp image
|
||||
Il2CppModels.Clear();
|
||||
AppModels.Clear();
|
||||
foreach (var image in stream.Images) {
|
||||
OnStatusUpdate?.Invoke(this, "Analyzing IL2CPP data");
|
||||
|
||||
@@ -93,14 +94,18 @@ namespace Il2CppInspectorGUI
|
||||
var inspector = new Inspector(binary, metadata);
|
||||
|
||||
// Build type model
|
||||
OnStatusUpdate?.Invoke(this, "Building type model");
|
||||
Il2CppModels.Add(new Il2CppModel(inspector));
|
||||
OnStatusUpdate?.Invoke(this, "Building .NET type model");
|
||||
var typeModel = new TypeModel(inspector);
|
||||
|
||||
// Initialize (but don't build) application model
|
||||
// We will build the model after the user confirms the Unity version and target compiler
|
||||
AppModels.Add(new AppModel(typeModel));
|
||||
}
|
||||
}
|
||||
// Unsupported architecture; ignore it
|
||||
catch (NotImplementedException) { }
|
||||
}
|
||||
if (!Il2CppModels.Any()) {
|
||||
if (!AppModels.Any()) {
|
||||
throw new InvalidOperationException("Could not auto-detect any IL2CPP binary images in the file. This may mean the binary file is packed, encrypted or obfuscated, that the file is not an IL2CPP image or that Il2CppInspector was not able to automatically find the required data. Please check the binary file in a disassembler to ensure that it is an unencrypted IL2CPP binary before submitting a bug report!");
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -25,6 +25,7 @@ using Microsoft.Win32;
|
||||
using Il2CppInspector;
|
||||
using Il2CppInspector.Cpp;
|
||||
using Il2CppInspector.GUI;
|
||||
using Il2CppInspector.Model;
|
||||
using Il2CppInspector.Outputs;
|
||||
using Il2CppInspector.Reflection;
|
||||
using Ookii.Dialogs.Wpf;
|
||||
@@ -112,7 +113,7 @@ namespace Il2CppInspectorGUI
|
||||
// Binary loaded successfully
|
||||
areaBusyIndicator.Visibility = Visibility.Hidden;
|
||||
|
||||
lstImages.ItemsSource = app.Il2CppModels;
|
||||
lstImages.ItemsSource = app.AppModels;
|
||||
lstImages.SelectedIndex = 0;
|
||||
}
|
||||
else {
|
||||
@@ -144,7 +145,7 @@ namespace Il2CppInspectorGUI
|
||||
// Package loaded successfully
|
||||
areaBusyIndicator.Visibility = Visibility.Hidden;
|
||||
|
||||
lstImages.ItemsSource = app.Il2CppModels;
|
||||
lstImages.ItemsSource = app.AppModels;
|
||||
lstImages.SelectedIndex = 0;
|
||||
}
|
||||
else {
|
||||
@@ -175,10 +176,10 @@ namespace Il2CppInspectorGUI
|
||||
}
|
||||
|
||||
// Get selected image
|
||||
var model = (Il2CppModel)((ListBox)sender).SelectedItem;
|
||||
var model = (AppModel)((ListBox)sender).SelectedItem;
|
||||
|
||||
// Get namespaces
|
||||
var namespaces = model.Assemblies.SelectMany(x => x.DefinedTypes).GroupBy(t => t.Namespace).Select(n => n.Key);
|
||||
var namespaces = model.ILModel.Assemblies.SelectMany(x => x.DefinedTypes).GroupBy(t => t.Namespace).Select(n => n.Key);
|
||||
|
||||
// Break namespaces down into a tree
|
||||
var namespaceTree = deconstructNamespaces(namespaces);
|
||||
@@ -204,7 +205,7 @@ namespace Il2CppInspectorGUI
|
||||
var prevCppSelection = cboCppUnityVersion.SelectedItem;
|
||||
cboUnityVersion.Items.Clear();
|
||||
cboCppUnityVersion.Items.Clear();
|
||||
foreach (var version in UnityHeader.GuessHeadersForModel(model)) {
|
||||
foreach (var version in UnityHeader.GuessHeadersForModel(model.ILModel)) {
|
||||
cboUnityVersion.Items.Add(version);
|
||||
cboCppUnityVersion.Items.Add(version);
|
||||
}
|
||||
@@ -287,7 +288,7 @@ namespace Il2CppInspectorGUI
|
||||
/// Perform export
|
||||
/// </summary>
|
||||
private async void BtnExport_OnClick(object sender, RoutedEventArgs e) {
|
||||
var model = (Il2CppModel) lstImages.SelectedItem;
|
||||
var model = (AppModel) lstImages.SelectedItem;
|
||||
|
||||
var unityPath = txtUnityPath.Text;
|
||||
var unityAssembliesPath = txtUnityScriptPath.Text;
|
||||
@@ -318,7 +319,7 @@ namespace Il2CppInspectorGUI
|
||||
// Get options
|
||||
var excludedNamespaces = constructExcludedNamespaces((IEnumerable<CheckboxNode>) trvNamespaces.ItemsSource);
|
||||
|
||||
var writer = new CSharpCodeStubs(model) {
|
||||
var writer = new CSharpCodeStubs(model.ILModel) {
|
||||
ExcludedNamespaces = excludedNamespaces.ToList(),
|
||||
SuppressMetadata = cbSuppressMetadata.IsChecked == true,
|
||||
MustCompile = cbMustCompile.IsChecked == true
|
||||
@@ -404,14 +405,14 @@ namespace Il2CppInspectorGUI
|
||||
|
||||
var outFile = scriptSaveFileDialog.FileName;
|
||||
|
||||
txtBusyStatus.Text = "Generating IDAPython script...";
|
||||
areaBusyIndicator.Visibility = Visibility.Visible;
|
||||
var selectedVersion = ((UnityHeader)cboUnityVersion.SelectedItem)?.MinVersion;
|
||||
await Task.Run(() => {
|
||||
var idaWriter = new IDAPythonScript(model) {
|
||||
UnityVersion = selectedVersion,
|
||||
};
|
||||
idaWriter.WriteScriptToFile(outFile);
|
||||
OnStatusUpdate(this, "Building C++ application model");
|
||||
model.Build(selectedVersion, CppCompilerType.GCC);
|
||||
|
||||
OnStatusUpdate(this, "Generating IDAPython script");
|
||||
new IDAPythonScript(model).WriteScriptToFile(outFile);
|
||||
});
|
||||
break;
|
||||
|
||||
@@ -430,16 +431,15 @@ namespace Il2CppInspectorGUI
|
||||
|
||||
var cppOutFile = cppSaveFileDialog.FileName;
|
||||
|
||||
txtBusyStatus.Text = "Generating C++ scaffolding...";
|
||||
areaBusyIndicator.Visibility = Visibility.Visible;
|
||||
var selectedCppUnityVersion = ((UnityHeader)cboCppUnityVersion.SelectedItem)?.MinVersion;
|
||||
var cppCompiler = (CppCompiler.Type) Enum.Parse(typeof(CppCompiler.Type), cboCppCompiler.SelectionBoxItem.ToString());
|
||||
var cppCompiler = (CppCompilerType) Enum.Parse(typeof(CppCompilerType), cboCppCompiler.SelectionBoxItem.ToString());
|
||||
await Task.Run(() => {
|
||||
var cppWriter = new CppScaffolding(model) {
|
||||
UnityVersion = selectedCppUnityVersion,
|
||||
Compiler = cppCompiler
|
||||
};
|
||||
cppWriter.WriteCppToFile(cppOutFile);
|
||||
OnStatusUpdate(this, "Building C++ application model");
|
||||
model.Build(selectedCppUnityVersion, cppCompiler);
|
||||
|
||||
OnStatusUpdate(this, "Generating C++ scaffolding");
|
||||
new CppScaffolding(model).WriteCppToFile(cppOutFile);
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user