From f7d2dd6e2d04cfc286d5eb7fd5c3b10a2d673729 Mon Sep 17 00:00:00 2001 From: Katy Coe Date: Sat, 18 Jul 2020 21:47:33 +0200 Subject: [PATCH] C++: Output method pointers and signatures --- .../Outputs/CppScaffolding.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Il2CppInspector.Common/Outputs/CppScaffolding.cs b/Il2CppInspector.Common/Outputs/CppScaffolding.cs index d4e4353..97c0423 100644 --- a/Il2CppInspector.Common/Outputs/CppScaffolding.cs +++ b/Il2CppInspector.Common/Outputs/CppScaffolding.cs @@ -80,6 +80,26 @@ namespace Il2CppInspector.Outputs } writer.Close(); + + // Write method pointers and signatures to il2cpp-functions.h + var methodFile = Path.Combine(outputPath, "il2cpp-functions.h"); + + using var fs4 = new FileStream(methodFile, FileMode.Create); + writer = new StreamWriter(fs4, Encoding.UTF8); + + writeHeader(); + writeSectionHeader("IL2CPP application-specific method definition addresses and signatures"); + + writeCode("using namespace app;"); + writeLine(""); + + foreach (var method in model.Methods.Values) { + var arguments = string.Join(", ", method.CppFnPtrType.Arguments.Select(a => a.Type.Name + " " + (a.Name == "this" ? "__this" : a.Name))); + writeCode($"DO_APP_FUNC(0x{method.MethodCodeAddress - model.Package.BinaryImage.ImageBase:X8}, {method.CppFnPtrType.ReturnType.Name}, " + + $"{method.CppFnPtrType.Name}, ({arguments}));"); + } + + writer.Close(); } private void writeHeader() {