diff --git a/Il2CppTests/TestAppModelQueries.cs b/Il2CppTests/TestAppModelQueries.cs new file mode 100644 index 0000000..29e3fcd --- /dev/null +++ b/Il2CppTests/TestAppModelQueries.cs @@ -0,0 +1,51 @@ +/* + Copyright 2020 Katy Coe - http://www.djkaty.com - https://github.com/djkaty + + All rights reserved. +*/ + +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Il2CppInspector.Cpp; +using Il2CppInspector.Cpp.UnityHeaders; +using Il2CppInspector.Model; +using Il2CppInspector.Reflection; +using NUnit.Framework; + +namespace Il2CppInspector +{ + [TestFixture] + public partial class FixedTests + { + // Tests for static analysis queries + [Test] + public void TestAppModelQueries() { + // Arrange + // We're currently in IlCppTests\bin\Debug\netcoreapp3.0 or similar + var testPath = Path.GetFullPath(Directory.GetCurrentDirectory() + @"\..\..\..\TestBinaries\ArraysAndPointers-ARM64"); + + // Act + var inspectors = Il2CppInspector.LoadFromFile(testPath + @"\ArraysAndPointers-ARM64.so", testPath + @"\global-metadata.dat"); + var model = new TypeModel(inspectors[0]); + var app = new AppModel(model).Build(); + + // Assert + + // Check VTable offset is accurate + Assert.AreEqual(0x130, app.GetVTableOffset()); + + // BufferedStream.Flush() + Assert.AreEqual(11, app.GetVTableIndexFromClassOffset(0x1E0)); + + var vtable = model.GetType("System.IO.BufferedStream").GetVTable(); + + Assert.AreEqual("get_CanWrite", vtable[app.GetVTableIndexFromClassOffset(0x1E0)].Name); + + var method = app.Methods.Values.First(m => m.MethodCodeAddress == 0x7C94D4); + Assert.AreEqual("Flush", method.Method.Name); + Assert.AreEqual("System.IO.BufferedStream", method.Method.DeclaringType.FullName); + } + } +}